sql >> Database teknologi >  >> RDS >> Database

Datamaskering i realtid ved hjælp af triggere

Tidligere artikler i IRI-bloggen beskrev den statiske datamaskering af nye databasedata ved hjælp af /INCLUDE-logik eller /QUERY-syntaks i planlagte IRI FieldShield-jobscripts, der krævede ændringer i kolonneværdier for at detektere opdateringer. Denne artikel beskriver en mere passiv, men integreret måde at udløse FieldShield-maskeringsfunktioner på på basis af SQL-hændelser; med andre ord at maskere data, som det produceres i realtid.

Mere specifikt dokumenterer denne artikel installation og brug af lagrede procedurer, der kalder FieldShield-datamaskeringsbiblioteksfunktioner til at maskere PII i Oracle 12c på Windows. Det kan også tjene som en 'proceduremodel' for andre databaser og operativsystemer.

Minimumskrav
  • En version af Oracle-databasen, der er JVM-aktiveret
  • Oracle-serveren /bin skal være i systemets PATH
  • En licenseret kopi af IRI FieldShield og dets Sandkey-softwareudviklingskit
  • Oracle Java JRE 8
  • Microsoft .NET v4.8 Framework
Installation

Når du har mappen sandkey.zip, skal du udpakke sandkey.jar og sandkeyFunctions.jar filer, og libsandkey.dll fil, der svarer til dit operativsystem. libsandkey.dll filen er i .zip-filens rodmappe

Følg disse trin, når du har filerne:

  • Åbn en kommandoprompt, naviger til, hvor filerne er placeret, og indtast disse kommandoer i formatet:
loadjava -r -u /@ 

Hvis du får en fejl relateret til CREATE$java$LOB$TABLE, mens du gør dette, har du sandsynligvis utilstrækkelige privilegier og skal muligvis køre kommandoen én gang som SYSTEM.

  • Placer libsandkey.dll fil i bin mappe på Oracle-serveren. Alternativt kan du tilføje placeringen af ​​filen til systemstien.
  • Opret forbindelse til databasen som SYSTEM ved hjælp af SQL*Plus eller et lignende program, og indtast følgende forespørgsel:
vælg seq, kind, grantee, name, aktiveret fra dba_java_policy hvor navn som '%java.lang.RuntimePermission%';

Find politikken mærket "java.lang.RuntimePermission#loadLibrary.*". I dette tilfælde er det nummer 99. Denne politik skal midlertidigt deaktiveres for at give Sandkey-brugeren tilladelse i databasen.

  • Nu hvor politiknummeret er kendt, skal du udsende følgende kommandoer for at deaktivere politikken, give tilladelse til en bruger og derefter genaktivere politikken:
exec dbms_java.disable_permission(99);exec dbms_java.grant_permission( 'IRIDEMO', 'SYS:java.lang.RuntimePermission', 'loadLibrary.libsandkey', '' );exec dbms_java.enable_permission(99);

før>

Sørg for, at brugernavnet er fuldt stort som vist, ellers vil systemet ikke genkende det.

  • Opret følgende funktioner i SQL*Plus ved at køre et script eller ved manuelt at indtaste disse kommandoer:
CREATE FUNCTION enc_aes256 (input VARCHAR2, bestå VARCHAR2) RETURN VARCHAR2AS LANGUAGE JAVANAME 'sandkeyFunctions.Functions.encaes256(java.lang.String, java.lang.String) return java.langCREATE_String (inpCTION_EncREATE_(inpCTION_String'; 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 (2,2input VARGUARAGE) JAVANAME 'sandkeyFunctions.Functions.encfpalphanum(java.lang.String, java.lang.String) returner java.lang.String';/CREATE FUNCTION dec_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2AS LANGUAGE LANGUAGE.caFunctions.FJAun 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.decf.lang.String,javapascii, lang.String) returner 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';/
  • Du kan nu oprette lagrede procedurer eller udløsere ved hjælp af Sandkey-krypterings- og dekrypteringsfunktionerne, som er kompatible med de samme statiske datakrypteringsfunktioner i hjælpeversionerne af IRI FieldShield, IRI DarkShield og IRI CellShield.
Use Case:PL/SQL Trigger

Her er et eksempel, der bruger en Sandkey-krypteringsfunktion til automatisk at kryptere data, når de indsættes i MEDARBEJDERE-tabellen:

Denne udløser bruger funktionen enc_fp_ascii (ASCII-formatbevarende kryptering) til at kryptere LAST_NAME for den nye medarbejder og funktionen enc_fp_alphanum til at kryptere PHONE_NUMBER på den nye medarbejder i hver indsat række.

Før dataene indsættes, sender triggeren de nye data som input , og adgangskode (krypteringsnøgleværdi) som pass , ind i Sandkey-krypteringsfunktionerne. Funktionen returnerer chiffertekstresultatet for hver værdi som output til den nye række.

I dette eksempel, da fem nye rækker blev indsat i tabellen, skal du bemærke, hvordan kolonnerne LAST_NAME og PHONE_NUMBER blev krypteret med funktionerne beskrevet ovenfor.

Faktisk, når de først er installeret, kan Sandkey-maskeringsfunktioner bruges på enhver ønsket måde inden for PL/SQL's muligheder for at understøtte mere "dynamiske" datamaskeringskrav til hændelsesdrev.

Kontakt for at få hjælp til denne tilgang i dit databasemiljø.

Use Case:Dekrypteret visning

Dette eksempel viser oprettelsen af ​​en dekrypteret visning baseret på tabellen MEDARBEJDERE.

Den dekrypterede visning oprettes på samme måde som en hvilken som helst visning, med undtagelse af hvordan datakolonnerne kaldes. Individuelle kolonner dekrypteres ved hjælp af deres tilsvarende funktioner i formatet:

(, '')

Oprettelsen af ​​en dekrypteret visning gør det muligt for udpegede brugere at forespørge data fra visningen, mens de faktiske data i MEDARBEJDERE-tabellen forbliver krypteret. Nedenfor er et billede af, hvordan visningen ville se ud, når den blev spurgt.

Integrationen af ​​Sandkey og Oracle giver mulighed for større kontrol over sikkerheden af ​​dine data gennem automatiske krypteringsudløsere, dekrypterede visninger eller brugerdefinerede lagrede procedurer. Mere generelt, ved at bruge FieldShield-maskeringsrutiner og -procedurer som PL/SQL, kan du nu maskere følsomme data på basis af databasehændelser i realtid til en række forskellige anvendelsestilfælde.


  1. Sådan fungerer RADIANS() i MariaDB

  2. WEEKOFYEAR() Eksempler – MySQL

  3. Hvordan vælger man fra objekttypekolonne i Oracle 11g?

  4. Hvorfor postgres ikke bruger indekset i min forespørgsel