sql >> Database >  >> RDS >> Database

Realtime gegevensmaskering met behulp van triggers

Eerdere artikelen in de IRI-blog gaven gedetailleerde informatie over het maskeren van statische gegevens van nieuwe databasegegevens met behulp van /INCLUDE-logica of /QUERY-syntaxis in geplande IRI FieldShield-taakscripts waarvoor wijzigingen in kolomwaarden nodig waren om updates te detecteren. Dit artikel beschrijft een meer passieve maar geïntegreerde manier om FieldShield-maskeringsfuncties te activeren op basis van SQL-gebeurtenissen; met andere woorden, om gegevens te maskeren zoals deze in realtime worden geproduceerd.

Meer specifiek documenteert dit artikel de installatie en het gebruik van opgeslagen procedures die FieldShield-gegevensmaskeringsbibliotheekfuncties aanroepen om PII te maskeren in Oracle 12c op Windows. Het kan ook dienen als een 'proceduremodel' voor andere databases en besturingssystemen.

Minimumvereisten
  • Een versie van de Oracle-database die geschikt is voor JVM
  • Oracle-server /bin moet in het systeem PATH staan
  • Een gelicentieerd exemplaar van IRI FieldShield en zijn Sandkey-softwareontwikkelingskit
  • Oracle Java JRE 8
  • Microsoft .NET v4.8 Framework
Installatie

Zodra je de map sandkey.zip hebt, pak je de sandkey.jar . uit en sandkeyFunctions.jar bestanden, en de libsandkey.dll bestand dat overeenkomt met uw besturingssysteem. De libsandkey.dll bestand bevindt zich in de hoofdmap van het .zip-bestand

Volg deze stappen nadat u de bestanden hebt:

  • Open een opdrachtprompt, navigeer naar waar de bestanden zich bevinden en voer deze opdrachten in in de indeling:
loadjava -r -u <username>/<password>@<database> <filename>

Als je een foutmelding krijgt met betrekking tot CREATE$java$LOB$TABLE terwijl je dit doet, heb je waarschijnlijk onvoldoende rechten en moet je de opdracht misschien één keer als SYSTEM uitvoeren.

  • Plaats de libsandkey.dll bestand in de bin map van de Oracle-server. U kunt ook de locatie van het bestand toevoegen aan het systeempad.
  • Maak verbinding met de database als SYSTEEM met behulp van SQL*Plus of een vergelijkbaar programma, en voer de volgende vraag in:
select seq, kind, grantee, name, enabled from dba_java_policy where name like ‘%java.lang.RuntimePermission%’;

Zoek het beleid met het label "java.lang.RuntimePermission#loadLibrary.*". In dit geval is dit nummer 99. Dit beleid moet tijdelijk worden uitgeschakeld om toestemming te verlenen aan de Sandkey-gebruiker in de database.

  • Nu het polisnummer bekend is, geeft u de volgende opdrachten om het beleid uit te schakelen, toestemming te verlenen aan een gebruiker en het beleid vervolgens weer in te schakelen:
exec dbms_java.disable_permission(99);

exec dbms_java.grant_permission( ‘IRIDEMO’, ‘SYS:java.lang.RuntimePermission’, ‘loadLibrary.libsandkey’, ‘’ );

exec dbms_java.enable_permission(99);

Zorg ervoor dat de gebruikersnaam volledig in hoofdletters staat, zoals weergegeven, anders zal het systeem deze niet herkennen.

  • Maak de volgende functies in SQL*Plus door een script uit te voeren of door deze opdrachten handmatig in te voeren:
CREATE FUNCTION enc_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2

AS LANGUAGE JAVA

NAME 'sandkeyFunctions.Functions.encaes256(java.lang.String, java.lang.String) return java.lang.String';

/

CREATE FUNCTION enc_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2

AS LANGUAGE JAVA

NAME 'sandkeyFunctions.Functions.encfpascii(java.lang.String, java.lang.String) return java.lang.String';

/

CREATE FUNCTION enc_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2

AS LANGUAGE JAVA

NAME 'sandkeyFunctions.Functions.encfpalphanum(java.lang.String, java.lang.String) return java.lang.String';

/

CREATE FUNCTION dec_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2

AS LANGUAGE JAVA

NAME 'sandkeyFunctions.Functions.decaes256(java.lang.String, java.lang.String) return java.lang.String';

/

CREATE FUNCTION dec_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2

AS LANGUAGE JAVA

NAME 'sandkeyFunctions.Functions.decfpascii(java.lang.String, java.lang.String) return java.lang.String';

/

CREATE FUNCTION dec_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2

AS LANGUAGE JAVA

NAME 'sandkeyFunctions.Functions.decfpalphanum(java.lang.String, java.lang.String) return java.lang.String';

/
  • U kunt nu opgeslagen procedures of triggers maken met behulp van de Sandkey-coderings- en decoderingsfuncties, die compatibel zijn met dezelfde statische gegevenscoderingsfuncties in de hulpprogramma-versies van IRI FieldShield, IRI DarkShield en IRI CellShield.
Gebruiksvoorbeeld:PL/SQL-trigger

Hier is een voorbeeld dat een Sandkey-coderingsfunctie gebruikt om gegevens automatisch te coderen zoals deze in de WERKNEMERS-tabel worden ingevoegd:

Deze trigger gebruikt de enc_fp_ascii-functie (ASCII-formaat met behoud van codering) om de LAST_NAME van de nieuwe werknemer te coderen, en de enc_fp_alphanum-functie om het PHONE_NUMBER van de nieuwe medewerker in elke ingevoegde rij te coderen.

Voordat de gegevens worden ingevoegd, geeft de trigger de nieuwe gegevens door als invoer , en wachtwoord (coderingssleutelwaarde) als pass , in de Sandkey-coderingsfuncties. De functie retourneert het cijfertekstresultaat van elke waarde als uitvoer naar de nieuwe rij.

In dit voorbeeld, aangezien er vijf nieuwe rijen in de tabel zijn ingevoegd, moet u er rekening mee houden hoe de kolommen LAST_NAME en PHONE_NUMBER zijn versleuteld met de hierboven beschreven functies.

Eenmaal geïnstalleerd, kunnen de Sandkey-maskeringsfuncties op elke gewenste manier worden gebruikt binnen de mogelijkheden van PL/SQL om de meer "dynamische" vereisten voor het maskeren van gebeurtenisgestuurde gegevens te ondersteunen.

Neem contact op voor hulp bij deze aanpak in uw databaseomgeving.

Gebruiksvoorbeeld:gedecodeerde weergave

Dit voorbeeld toont het maken van een gedecodeerde weergave op basis van de WERKNEMERS-tabel.

De gedecodeerde weergave wordt gemaakt op dezelfde manier als elke weergave, met uitzondering van hoe de gegevenskolommen worden aangeroepen. Individuele kolommen worden gedecodeerd met behulp van hun corresponderende functies, in het formaat van:

<functionName>(<columnName>, ‘<password/key>’) <displayName>

Door een gedecodeerde weergave te maken, kunnen aangewezen gebruikers gegevens uit de weergave opvragen, terwijl de feitelijke gegevens in de WERKNEMERS-tabel versleuteld blijven. Hieronder ziet u een afbeelding van hoe de weergave eruit zou zien als u ernaar vroeg.

De integratie van Sandkey en Oracle zorgt voor meer controle over de beveiliging van uw gegevens door middel van automatische versleutelingstriggers, ontsleutelde weergaven of aangepaste opgeslagen procedures. Meer in het algemeen kunt u met behulp van FieldShield-maskeringsroutines en -procedures zoals PL/SQL nu gevoelige gegevens maskeren op basis van realtime databasegebeurtenissen voor verschillende gebruikssituaties.


  1. Database aanmaken in MySQL

  2. UNION-query met het actieve recordpatroon van codeigniter

  3. Het gegevenstype van een kolom wijzigen in SQL Server (T-SQL)

  4. Voorrang van gegevenstype in SQL Server