Masking Sensitive Data in Oracle Database: Maja Veselica, Consultant
Masking Sensitive Data in Oracle Database: Maja Veselica, Consultant
Masking Sensitive Data in Oracle Database: Maja Veselica, Consultant
in
Oracle Database
Maja Veselica,
Email: maja@evoxera.com
Twitter: orapassion
Website www.evoxera.com
Agenda
➢ Use-case-based Q&A
➢ Your questions
Introductory and Concepts
Q&A
Masking Data
➢ Data Masking
➢ Format entry
Type Description
Array List Randomly chosen value from the list of values
Type Description
➢ Data Masking
➢ Masking format
➢ Masking definition
➢ Format Library
Data Masking
Format Library
EM 12c
EM 12c
EM 12c
Q: How to implement Data Masking?
➢ VPD
➢ Policy
➢ Policy function
➢ Driving context
Q: How to implement VPD?
Data Redaction
Regular
None Full Partial Random
Expression
CUSTOMERS
SQL> SELECT * FROM CUSTOMERS; NAME CREDIT_CARD
tom 3455647456589132
mike 3734982321225691
john 3472586894975806
NAME CREDIT_CARD
tom 0
mike 0
DBMS_REDACT.ADD_POLICY
john 0 (object_schema => ‘GLDB’,
object_name => ‘CUSTOMERS’,
policy_name => ‘CCN_POLICY',
column_name => ‘CREDIT_CARD',
function_type => DBMS_REDACT.FULL,
expression => ‘7=7');
Data Redaction - Partial
CUSTOMERS
SQL> SELECT * FROM CUSTOMERS; NAME CREDIT_CARD
tom 3455647456589132
mike 3734982321225691
john 3472586894975806
NAME CREDIT_CARD
tom ####-####-####-9132
DBMS_REDACT.ADD_POLICY
mike ####-####-####-5691 (object_schema => ‘GLDB’,
object_name => ’CUSTOMERS’,
john ####-####-####-5806 policy_name => ’CCN_POLICY',
column_name => ’CREDIT_CARD',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'VVVVFVVVVFVVVVFVVVV,
VVVV-VVVV-VVVV-VVVV, #,1,12’
expression => ‘7=7');
Data Redaction - Exemptions
CUSTOMERS
RMAN> BACKUP TABLESPACE gltbs; NAME CREDIT_CARD
tom 3455647456589132
mike 3734982321225691
john 3472586894975806
NAME CREDIT_CARD
tom 3455647456589132
mike 3734982321225691 DBMS_REDACT.ADD_POLICY
(object_schema => ‘GLDB’,
john 3472586894975806 object_name => ’CUSTOMERS’,
policy_name => ’CCN_POLICY',
column_name => ’CREDIT_CARD',
function_type=> DBMS_REDACT.FULL,
expression => ‘7=7');
Data Redaction - Exemptions
CUSTOMERS
SQL> SELECT * FROM CUSTOMERS; NAME CREDIT_CARD
tom 3455647456589132
User with EXEMPT REDACTION POLICY mike 3734982321225691
john 3472586894975806
NAME CREDIT_CARD
tom 3455647456589132
mike 3734982321225691 DBMS_REDACT.ADD_POLICY
(object_schema => ‘GLDB’,
john 3472586894975806 object_name => ’CUSTOMERS’,
policy_name => ’CCN_POLICY',
column_name => ’CREDIT_CARD',
function_type => DBMS_REDACT.FULL,
expression => ‘7=7');
Data Redaction - Example
c##zoran@PDB1> BEGIN
2 DBMS_REDACT.ADD_POLICY (object_schema => ‘GLDB’,
3 object_name => ’CUSTOMERS’,
4 policy_name => ’CCN_POLICY',
5 column_name => ’CREDIT_CARD',
6 function_type => DBMS_REDACT.PARTIAL,
7 function_parameters => 'VVVVFVVVVFVVVVFVVVV, VVVV-VVVV-VVVV-VVVV,
#,1,12’
8 expression => ‘7=7');
9 END;
10 /
PL/SQL procedure successfully completed.
NAME CREDIT_CARD
---------------- --------------------
tom 3455-6474-5658-9132
mike 3734-9823-2122-5691
john 3472-5868-9497-5806
NAME CREDIT_CARD
---------------- --------------------
tom ####-####-####-9132
mike ####-####-####-5691
john ####-####-####-5806
NAME CREDIT_CARD
---------------- --------------------
john ####-####-####-5806
Data Redaction – NULLIFY Example (12.2)
BEGIN
DBMS_REDACT.ADD_POLICY (
object_schema => 'C##MAJA',
object_name => 'TEST',
policy_name => 'EMAIL_POLICY',
column_name => 'EMAIL',
function_type => DBMS_REDACT.NULLIFY,
expression => '1=1');
END;
/
Data Redaction – NULLIFY Example (12.2)
After redaction
SQL> BEGIN
2 DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE (
3 sensitive_type => ‘email_type’,
4 user_comment=> ’Type for email redaction’);
5 END;
6 /
NAME
----------------
email_type
TSDP Example – Associate sensitive columns
with that type
SQL> BEGIN
2 DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN(
3 schema_name => 'PARALLEL',
4 table_name => 'T1',
5 column_name => 'EMAIL_ADDRESS',
6 sensitive_type => 'email_type');
7 END;
8 /
SQL> BEGIN
2 DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN(
3 schema_name => ‘HR',
4 table_name => ‘EMPLOYEES',
5 column_name => 'EMAIL',
6 sensitive_type => 'email_type');
7 END;
8 /
Note: You can associate a column with only one type. If you try to associate it
with another type, you’ll receive ORA-45607.
TSDP Example – Create TSDP policy
SQL> DECLARE
2 redact_feature_options DBMS_TSDP_PROTECT.FEATURE_OPTIONS;
3 policy_conditions DBMS_TSDP_PROTECT.POLICY_CONDITIONS;
4 BEGIN
5 redact_feature_options('expression') :='1=1';
6 redact_feature_options('function_type') :='DBMS_REDACT.REGEXP';
7 redact_feature_options('regexp_pattern'):='([A-Za-z0-9._%+-]+)@([A-Za-
z0-9.-]+\.[A-Za-z]{2,4})';
8 redact_feature_options('regexp_replace_string'):='\1@xxxx.com';
9 policy_conditions(DBMS_TSDP_PROTECT.DATATYPE) := 'VARCHAR2';
10 DBMS_TSDP_PROTECT.ADD_POLICY
('redact_regexp_email',DBMS_TSDP_PROTECT.REDACT,redact_feature_options,
policy_conditions);
11 END;
12 /
TSDP Example – Associate the policy
with the type
SQL> BEGIN
2 DBMS_TSDP_PROTECT.ASSOCIATE_POLICY(
3 policy_name => 'redact_regexp_email',
4 sensitive_type => ‘email_type',
5 associate => true);
6 END;
7 /
TSDP Example – Enable the policy
SQL> begin
2 DBMS_TSDP_PROTECT.ENABLE_PROTECTION_COLUMN(
3 schema_name =>'PARALLEL',
4 table_name =>'T1',
5 column_name =>'EMAIL_ADDRESS',
6 policy => 'redact_regexp_email');
7 end;
8 /
SQL> begin
2 DBMS_TSDP_PROTECT.ENABLE_PROTECTION_COLUMN(
3 schema_name =>'HR',
4 table_name =>'EMPLOYEES',
5 column_name =>'EMAIL',
6 policy => 'redact_regexp_email');
7 end;
8 /
SQL> BEGIN
2 DBMS_TSDP_PROTECT.ENABLE_PROTECTION_TYPE(
3 sensitive_type => 'email_type');
4 END;
5 /
TSDP Example – Disable the policy
SQL> begin
2 DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN(
3 schema_name =>'PARALLEL',
4 table_name =>'T1',
5 column_name =>'EMAIL_ADDRESS',
6 policy => 'redact_regexp_email');
7 end;
8 /
SQL> begin
2 DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN(
3 schema_name =>'HR',
4 table_name =>'EMPLOYEES',
5 column_name =>'EMAIL',
6 policy => 'redact_regexp_email');
7 end;
8 /
SQL> BEGIN
2 DBMS_TSDP_PROTECT.DISABLE_PROTECTION_TYPE(
3 sensitive_type => 'email_type');
4 END;
5 /
Q: How to alter the TSDP policy?
EMAIL
------------------------------
maja.veselica@mydomain.com
EMAIL_ADDRESS
------------------------------
maja.veselica@mydomain.com
zoran.pavlovic@mydomain.com
TSDP – Predefined REDACT_AUDIT policy
➢ Referential integrity?
Original data in table Klijenti (Clients)
Original data in table Racuni (Accounts)
Original data in table Kartice (CreditCards)
Identified sensitive columns
Table Column
Klijenti Prezime
Klijenti Telefon
Klijenti Adresa
Klijenti JMBG
Racuni Stanje
Racuni Broj_racuna
Kartice Datum_izdavanja
Kartice Datum_isteka
Kartice Broj_kartice
Masking Definition
Masking Definition
Masked data
Masked data
Masked data
Use Case 2