Les articles précédents du blog IRI détaillaient le masquage des données statiques des nouvelles données de base de données à l'aide de la logique /INCLUDE ou de la syntaxe /QUERY dans les scripts de travail IRI FieldShield planifiés qui nécessitaient des modifications des valeurs de colonne pour détecter les mises à jour. Cet article décrit une méthode plus passive mais intégrée pour déclencher les fonctions de masquage de FieldShield sur la base d'événements SQL ; en d'autres termes, pour masquer les données telles qu'elles sont produites en temps réel.
Plus précisément, cet article documente l'installation et l'utilisation de procédures stockées qui appellent les fonctions de la bibliothèque de masquage des données FieldShield pour masquer les PII dans Oracle 12c sous Windows. Il peut également servir de "modèle de procédure" pour d'autres bases de données et systèmes d'exploitation.
Exigences minimales
- Une version de la base de données Oracle compatible JVM
- Le serveur Oracle /bin doit se trouver dans le système PATH
- Une copie sous licence d'IRI FieldShield et de son kit de développement logiciel Sandkey
- Oracle Java JRE 8
- Cadre Microsoft .NET v4.8
Installation
Une fois que vous avez le dossier sandkey.zip, extrayez le sandkey.jar et sandkeyFunctions.jar fichiers et libsandkey.dll fichier correspondant à votre système d'exploitation. Le libsandkey.dll le fichier se trouve dans le dossier racine du fichier .zip
Suivez ces étapes une fois que vous avez les fichiers :
- Ouvrez une invite de commande, accédez à l'emplacement des fichiers et saisissez ces commandes au format suivant :
loadjava -r -u/ @
Si vous obtenez une erreur liée à CREATE$java$LOB$TABLE lors de cette opération, vous disposez probablement de privilèges insuffisants et vous devrez peut-être exécuter la commande une fois en tant que SYSTEM.
- Placez le libsandkey.dll fichier dans le bin dossier du serveur Oracle. Vous pouvez également ajouter l'emplacement du fichier au chemin système.
- Connectez-vous à la base de données en tant que SYSTEM à l'aide de SQL*Plus ou d'un programme similaire, puis saisissez la requête suivante :
sélectionnez seq, kind, grantee, name, enabled from dba_java_policy où name like '%java.lang.RuntimePermission%' ;
Recherchez la stratégie intitulée "java.lang.RuntimePermission#loadLibrary.*". Dans ce cas, il s'agit du numéro 99. Cette stratégie doit être temporairement désactivée afin d'accorder l'autorisation à l'utilisateur Sandkey dans la base de données.
- Maintenant que le numéro de stratégie est connu, exécutez les commandes suivantes pour désactiver la stratégie, accorder l'autorisation à un utilisateur, puis réactiver la stratégie :
exec dbms_java.disable_permission(99);exec dbms_java.grant_permission( 'IRIDEMO', 'SYS:java.lang.RuntimePermission', 'loadLibrary.libsandkey', '' );exec dbms_java.enable_permission(99);
Assurez-vous que le nom d'utilisateur est entièrement en majuscules comme indiqué, sinon le système ne le reconnaîtra pas.
- Créez les fonctions suivantes dans SQL*Plus en exécutant un script ou en saisissant manuellement ces commandes :
CREATE FUNCTION enc_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.encaes256(java.lang.String, java.lang.String) return java.lang.String';/CREATE FUNCTION enc_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.encfpascii(java.lang.String, java.lang.String) return java.lang.String';/CREATE FUNCTION enc_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.encfpalphanum(java.lang.String, java.lang.String) return java.lang.String';/CREATE FUNCTION dec_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.decaes256( java.lang.String, java.lang.String) return java.lang.String';/CREATE FUNCTION dec_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.decfpascii(java.lang.String, java. lang.String) renvoie java.lang.String';/CREAT E FUNCTION dec_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.decfpalphanum(java.lang.String, java.lang.String) return java.lang.String';/
- Vous pouvez désormais créer des procédures stockées ou des déclencheurs à l'aide des fonctions de chiffrement et de déchiffrement Sandkey, qui sont compatibles avec les mêmes fonctions de chiffrement de données statiques dans les versions utilitaires d'IRI FieldShield, IRI DarkShield et IRI CellShield.
Cas d'utilisation :Déclencheur PL/SQL
Voici un exemple qui utilise une fonction de chiffrement Sandkey pour chiffrer automatiquement les données lorsqu'elles sont insérées dans la table EMPLOYEES :
Ce déclencheur utilise la fonction enc_fp_ascii (chiffrement préservant le format ASCII) pour chiffrer le LAST_NAME du nouvel employé, et la fonction enc_fp_alphanum pour chiffrer le PHONE_NUMBER du nouvel employé dans chaque ligne insérée.
Avant que les données ne soient insérées, le déclencheur transmet les nouvelles données en tant qu'entrée , et le mot de passe (valeur de la clé de chiffrement) comme pass , dans les fonctions de cryptage Sandkey. La fonction renvoie le résultat chiffré de chaque valeur en tant que sortie à la nouvelle ligne.
Dans cet exemple, comme cinq nouvelles lignes ont été insérées dans le tableau, notez comment les colonnes LAST_NAME et PHONE_NUMBER ont été chiffrées avec les fonctions décrites ci-dessus.
En fait, une fois installées, les fonctions de masquage Sandkey peuvent être utilisées de toutes les manières souhaitées dans les limites des capacités de PL/SQL pour prendre en charge des exigences de masquage de données de lecteur d'événements plus "dynamiques".
Contactez-nous pour obtenir de l'aide sur cette approche dans votre environnement de base de données.
Cas d'utilisation :vue déchiffrée
Cet exemple montre la création d'une vue décryptée basée sur la table EMPLOYEES.
La vue décryptée est créée de la même manière que n'importe quelle vue serait créée, à l'exception de la façon dont les colonnes de données sont appelées. Les colonnes individuelles sont déchiffrées à l'aide de leurs fonctions correspondantes, au format :
( , ‘ ’)
La création d'une vue décryptée permet aux utilisateurs désignés d'interroger les données de la vue, tout en permettant aux données réelles de la table EMPLOYEES de rester cryptées. Vous trouverez ci-dessous une image de la façon dont la vue apparaîtrait lorsqu'elle serait interrogée.
L'intégration de Sandkey et Oracle permet un meilleur contrôle de la sécurité de vos données grâce à des déclencheurs de chiffrement automatiques, des vues déchiffrées ou des procédures stockées personnalisées. Plus généralement, en utilisant les routines et procédures de masquage FieldShield telles que PL/SQL, vous pouvez désormais masquer des données sensibles sur la base d'événements de base de données en temps réel pour une variété de cas d'utilisation.