Database
 sql >> Datenbank >  >> RDS >> Database

Echtzeit-Datenmaskierung mit Triggern

Frühere Artikel im IRI-Blog haben die statische Datenmaskierung neuer Datenbankdaten mit /INCLUDE-Logik oder /QUERY-Syntax in geplanten IRI-FieldShield-Jobskripten beschrieben, die Änderungen an Spaltenwerten erforderten, um Aktualisierungen zu erkennen. Dieser Artikel beschreibt eine passivere, aber integrierte Möglichkeit, FieldShield-Maskierungsfunktionen auf der Grundlage von SQL-Ereignissen auszulösen; mit anderen Worten, um Daten zu maskieren, während sie in Echtzeit erzeugt werden.

Genauer gesagt dokumentiert dieser Artikel die Installation und Verwendung gespeicherter Prozeduren, die FieldShield-Datenmaskierungsbibliotheksfunktionen aufrufen, um PII in Oracle 12c unter Windows zu maskieren. Es kann auch als „Vorgehensmodell“ für andere Datenbanken und Betriebssysteme dienen.

Mindestanforderungen
  • Eine JVM-fähige Version der Oracle-Datenbank
  • Oracle Server /bin muss sich im System PATH befinden
  • Eine lizenzierte Kopie von IRI FieldShield und seinem Sandkey-Softwareentwicklungskit
  • Oracle Java JRE 8
  • Microsoft .NET v4.8 Framework
Installation

Wenn Sie den Ordner sandkey.zip haben, extrahieren Sie sandkey.jar und sandkeyFunctions.jar Dateien und die libsandkey.dll Datei, die Ihrem Betriebssystem entspricht. Die libsandkey.dll Datei befindet sich im Stammordner der .zip-Datei

Befolgen Sie diese Schritte, nachdem Sie die Dateien haben:

  • Öffnen Sie eine Eingabeaufforderung, navigieren Sie zum Speicherort der Dateien und geben Sie diese Befehle im folgenden Format ein:
loadjava -r -u /@ 

Wenn Sie dabei einen Fehler im Zusammenhang mit CREATE$java$LOB$TABLE erhalten, verfügen Sie wahrscheinlich nicht über ausreichende Berechtigungen und müssen den Befehl möglicherweise einmal als SYSTEM.

ausführen
  • Platzieren Sie die libsandkey.dll Datei im bin Ordner des Oracle-Servers. Fügen Sie alternativ den Speicherort der Datei zum Systempfad hinzu.
  • Verbinden Sie sich mit SQL*Plus oder einem ähnlichen Programm als SYSTEM mit der Datenbank und geben Sie die folgende Abfrage ein:
seq seq, kind, grantee, name, enabled from dba_java_policy auswählen, wobei Name wie „%java.lang.RuntimePermission%“;

Suchen Sie die Richtlinie mit der Bezeichnung „java.lang.RuntimePermission#loadLibrary.*“. In diesem Fall ist es die Nummer 99. Diese Richtlinie muss vorübergehend deaktiviert werden, um dem Sandkey-Benutzer Berechtigungen in der Datenbank zu erteilen.

  • Nun, da die Richtliniennummer bekannt ist, führen Sie die folgenden Befehle aus, um die Richtlinie zu deaktivieren, einem Benutzer die Berechtigung zu erteilen und die Richtlinie dann wieder zu aktivieren:
exec dbms_java.disable_permission(99);exec dbms_java.grant_permission( 'IRIDEMO', 'SYS:java.lang.RuntimePermission', 'loadLibrary.libsandkey', '' );exec dbms_java.enable_permission(99); 

Stellen Sie sicher, dass der Benutzername wie gezeigt vollständig in Großbuchstaben geschrieben ist, oder das System wird ihn nicht erkennen.

  • Erstellen Sie die folgenden Funktionen in SQL*Plus, indem Sie ein Skript ausführen oder diese Befehle manuell eingeben:
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 (geben Sie VARCHAR2 ein, übergeben Sie 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) return java.lang.String';/CREAT E FUNCTION dec_fp_alphanum (geben Sie VARCHAR2 ein, übergeben Sie VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.decfpalphanum(java.lang.String, java.lang.String) return java.lang.String';/
  • Sie können jetzt gespeicherte Prozeduren oder Trigger mit den Sandkey-Verschlüsselungs- und -Entschlüsselungsfunktionen erstellen, die mit denselben statischen Datenverschlüsselungsfunktionen in den Utility-Versionen von IRI FieldShield, IRI DarkShield und IRI CellShield kompatibel sind.
Anwendungsfall:PL/SQL-Trigger

Hier ist ein Beispiel, das eine Sandkey-Verschlüsselungsfunktion verwendet, um Daten automatisch zu verschlüsseln, wenn sie in die Tabelle EMPLOYEES eingefügt werden:

Dieser Trigger verwendet die Funktion enc_fp_ascii (ASCII-Format unter Beibehaltung der Verschlüsselung), um den NACHNAMEN des neuen Mitarbeiters zu verschlüsseln, und die Funktion enc_fp_alphanum, um die PHONE_NUMBER des neuen Mitarbeiters in jeder eingefügten Zeile zu verschlüsseln.

Bevor die Daten eingefügt werden, übergibt der Trigger die neuen Daten als Eingabe und Passwort (Verschlüsselungsschlüsselwert) als pass , in die Sandkey-Verschlüsselungsfunktionen. Die Funktion gibt das Chiffretext-Ergebnis jedes Werts als Ausgabe zurück in die neue Zeile.

Beachten Sie in diesem Beispiel, wie fünf neue Zeilen in die Tabelle eingefügt wurden, wie die Spalten LAST_NAME und PHONE_NUMBER mit den oben beschriebenen Funktionen verschlüsselt wurden.

Tatsächlich können Sandkey-Maskierungsfunktionen nach der Installation innerhalb der Möglichkeiten von PL/SQL auf beliebige Weise verwendet werden, um „dynamischere“ Datenmaskierungsanforderungen für Ereignislaufwerke zu unterstützen.

Wenden Sie sich an uns, um Hilfe bei diesem Ansatz in Ihrer Datenbankumgebung zu erhalten.

Anwendungsfall:Entschlüsselte Ansicht

Dieses Beispiel zeigt die Erstellung einer entschlüsselten Ansicht basierend auf der Tabelle EMPLOYEES.

Die entschlüsselte Ansicht wird ähnlich wie jede andere Ansicht erstellt, mit der Ausnahme, wie die Datenspalten aufgerufen werden. Einzelne Spalten werden mit ihren entsprechenden Funktionen entschlüsselt, im Format:

(, ‘’) 

Die Erstellung einer entschlüsselten Ansicht ermöglicht bestimmten Benutzern, Daten aus der Ansicht abzufragen, während die eigentlichen Daten in der Tabelle EMPLOYEES verschlüsselt bleiben. Unten sehen Sie ein Bild, wie die Ansicht bei einer Abfrage aussehen würde.

Die Integration von Sandkey und Oracle ermöglicht eine bessere Kontrolle über die Sicherheit Ihrer Daten durch automatische Verschlüsselungsauslöser, entschlüsselte Ansichten oder benutzerdefinierte gespeicherte Prozeduren. Ganz allgemein können Sie jetzt mithilfe von FieldShield-Maskierungsroutinen und -verfahren wie PL/SQL sensible Daten auf der Grundlage von Echtzeit-Datenbankereignissen für eine Vielzahl von Anwendungsfällen maskieren.