Data Redaction (DBMS_REDACT) in Oracle Database 12c Release 1 (12.1)
Use data redaction to protect sensitive data in Oracle Database 12c Release 1 (12.1).
oracle 12cconfigurationintermediate
by OracleDba
14 views
Use data redaction to protect sensitive data in Oracle Database 12c Release 1 (12.1).
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
--drop user testuser1 cascade;
create user testuser1 identified by testuser1 quota unlimited on users;
grant create session, create table to testuser1;
--drop user testuser2 cascade;
create user testuser2 identified by testuser2 quota unlimited on users;
grant create session to testuser2;
grant execute on sys.dbms_redact to testuser1;
conn testuser1/testuser1@//localhost:1521/pdb1
drop table payment_details purge;
create table payment_details (
id number not null,
customer_id number not null,
card_no number not null,
card_string varchar2(19) not null,
expiry_date date not null,
sec_code number not null,
valid_date date,
constraint payment_details_pk primary key (id)
);
insert into payment_details values (1, 4000, 1234123412341234, '1234-1234-1234-1234', trunc(add_months(sysdate,12)), 123, null);
insert into payment_details values (2, 4001, 2345234523452345, '2345-2345-2345-2345', trunc(add_months(sysdate,12)), 234, null);
insert into payment_details values (3, 4002, 3456345634563456, '3456-3456-3456-3456', trunc(add_months(sysdate,12)), 345, null);
insert into payment_details values (4, 4003, 4567456745674567, '4567-4567-4567-4567', trunc(add_months(sysdate,12)), 456, null);
insert into payment_details values (5, 4004, 5678567856785678, '5678-5678-5678-5678', trunc(add_months(sysdate,12)), 567, null);
commit;
alter session set nls_date_format='dd-mon-yyyy';
column card_no format 9999999999999999
select *
from payment_details
order by id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 1234123412341234 1234-1234-1234-1234 28-OCT-2015 123
2 4001 2345234523452345 2345-2345-2345-2345 28-OCT-2015 234
3 4002 3456345634563456 3456-3456-3456-3456 28-OCT-2015 345
4 4003 4567456745674567 4567-4567-4567-4567 28-OCT-2015 456
5 4004 5678567856785678 5678-5678-5678-5678 28-OCT-2015 567
5 rows selected.
SQL>12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
conn testuser1/testuser1@//localhost:1521/pdb1
begin
dbms_redact.add_policy(
object_schema => user,
object_name => 'payment_details',
column_name => 'card_no',
policy_name => 'redact_card_info',
function_type => dbms_redact.full,
expression => '1=1'
);
end;
/
alter session set nls_date_format='dd-mon-yyyy';
column card_no format 9999999999999999
select *
from payment_details
order by id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 0 1234-1234-1234-1234 28-OCT-2015 123
2 4001 0 2345-2345-2345-2345 28-OCT-2015 234
3 4002 0 3456-3456-3456-3456 28-OCT-2015 345
4 4003 0 4567-4567-4567-4567 28-OCT-2015 456
5 4004 0 5678-5678-5678-5678 28-OCT-2015 567
5 rows selected.
SQL>
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
@redaction_value_defaults.sql
NUMBER_VALUE BINARY_FLOAT_VALUE BINARY_DOUBLE_VALUE CHAR_VALUE VARCHAR_VA NCHAR_VALU NVARCHAR_V DATE_VALUE TIMESTAMP_VALUE TIMESTAMP_WITH_TIME_ZONE_VALUE BLOB_VALUE CLOB_VALUE NCLOB_VALU
------------ ------------------ ------------------- ---------- ---------- ---------- ---------- -------------------- --------------------------- -------------------------------- -------------------- ---------- ----------
0 0 0 01-JAN-2001 00:00:00 01-JAN-2001 01:00:00.000000 01-JAN-01 01.00.00.000000 +00:00 5B72656461637465645D [redacted] [redacted]
1 row selected.
SQL>
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
@redaction_policies
OBJECT_OWNER OBJECT_NAME POLICY_NAME EXPRESSION ENABLE POLICY_DESCRIPTION
-------------------- ------------------------------ ------------------------------ ------------------------------ ------- --------------------
TESTUSER1 PAYMENT_DETAILS redact_card_info 1=1 YES
1 row selected.
SQL>
@redaction_columns testuser1 payment_details
OBJECT_OWNER OBJECT_NAME COLUMN_NAME FUNCTION_TYPE FUNCTION_PARAMETERS REGEXP_PATTERN REGEXP_REPLACE_STRING REGEXP_POSITION REGEXP_OCCURRENCE REGEXP_MAT COLUMN_DESCRIPTION
-------------------- ------------------------------ ------------------------------ --------------------------- ------------------------------ ------------------------------ ------------------------------ --------------- ----------------- ---------- --------------------
TESTUSER1 PAYMENT_DETAILS CARD_NO FULL REDACTION 0 0
1 row selected.
SQL>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
conn testuser1/testuser1@//localhost:1521/pdb1
begin
dbms_redact.alter_policy (
object_schema => user,
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => dbms_redact.modify_column,
column_name => 'card_no',
function_type => dbms_redact.partial,
function_parameters => '1,1,12'
);
end;
/
alter session set nls_date_format='dd-mon-yyyy';
column card_no format 9999999999999999
select *
from payment_details
order by id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 1111111111111234 1234-1234-1234-1234 28-OCT-2015 123
2 4001 1111111111112345 2345-2345-2345-2345 28-OCT-2015 234
3 4002 1111111111113456 3456-3456-3456-3456 28-OCT-2015 345
4 4003 1111111111114567 4567-4567-4567-4567 28-OCT-2015 456
5 4004 1111111111115678 5678-5678-5678-5678 28-OCT-2015 567
5 rows selected.
SQL>
begin
dbms_redact.alter_policy (
object_schema => user,
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => dbms_redact.add_column,
column_name => 'card_string',
function_type => dbms_redact.partial,
function_parameters => 'vvvvfvvvvfvvvvfvvvv,vvvv-vvvv-vvvv-vvvv,#,1,12'
);
end;
/
alter session set nls_date_format='dd-mon-yyyy';
column card_no format 9999999999999999
select *
from payment_details
order by id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 1111111111111234 ####-####-####-1234 28-OCT-2015 123
2 4001 1111111111112345 ####-####-####-2345 28-OCT-2015 234
3 4002 1111111111113456 ####-####-####-3456 28-OCT-2015 345
4 4003 1111111111114567 ####-####-####-4567 28-OCT-2015 456
5 4004 1111111111115678 ####-####-####-5678 28-OCT-2015 567
5 rows selected.
SQL>
BEGIN
DBMS_REDACT.alter_policy (
object_schema => user,
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => DBMS_REDACT.add_column,
column_name => 'expiry_Date',
function_type => DBMS_REDACT.partial,
function_parameters => 'm1d1Y'
);
END;
/
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SELECT *
FROM payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 1111111111111234 ####-####-####-1234 01-JAN-2015 123
2 4001 1111111111112345 ####-####-####-2345 01-JAN-2015 234
3 4002 1111111111113456 ####-####-####-3456 01-JAN-2015 345
4 4003 1111111111114567 ####-####-####-4567 01-JAN-2015 456
5 4004 1111111111115678 ####-####-####-5678 01-JAN-2015 567
5 rows selected.
SQL>
conn testuser1/testuser1@//localhost:1521/pdb1
begin
dbms_redact.alter_policy (
object_schema => user,
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => dbms_redact.modify_expression,
column_name => 'card_no',
expression => 'sys_context(''userenv'',''session_user'') != ''TESTUSER1'''
);
end;
/
-- Test on current user.
alter session set nls_date_format='dd-mon-yyyy';
column card_no format 9999999999999999
select *
from payment_details
order by id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 1234123412341234 1234-1234-1234-1234 28-OCT-2015 123
2 4001 2345234523452345 2345-2345-2345-2345 28-OCT-2015 234
3 4002 3456345634563456 3456-3456-3456-3456 28-OCT-2015 345
4 4003 4567456745674567 4567-4567-4567-4567 28-OCT-2015 456
5 4004 5678567856785678 5678-5678-5678-5678 28-OCT-2015 567
5 rows selected.
SQL>
-- Connect to another user and test.
GRANT SELECT ON testuser1.payment_details TO testuser2;
conn testuser2/testuser2@//localhost:1521/pdb1
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SELECT *
FROM testuser1.payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 1111111111111234 ####-####-####-1234 01-JAN-2015 123
2 4001 1111111111112345 ####-####-####-2345 01-JAN-2015 234
3 4002 1111111111113456 ####-####-####-3456 01-JAN-2015 345
4 4003 1111111111114567 ####-####-####-4567 01-JAN-2015 456
5 4004 1111111111115678 ####-####-####-5678 01-JAN-2015 567
5 rows selected.
SQL>1234567891011121314151617181920212223242526272829
conn testuser1/testuser1@//localhost:1521/pdb1
begin
dbms_redact.drop_policy (
object_schema => user,
object_name => 'payment_details',
policy_name => 'redact_card_info'
);
end;
/
alter session set nls_date_format='dd-mon-yyyy';
column card_no format 9999999999999999
select *
from payment_details
order by id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
1 4000 1234123412341234 1234-1234-1234-1234 28-OCT-2015 123
2 4001 2345234523452345 2345-2345-2345-2345 28-OCT-2015 234
3 4002 3456345634563456 3456-3456-3456-3456 28-OCT-2015 345
4 4003 4567456745674567 4567-4567-4567-4567 28-OCT-2015 456
5 4004 5678567856785678 5678-5678-5678-5678 28-OCT-2015 567
5 rows selected.
SQL>1
ORA-28081: Insufficient privileges - the command references a redacted object.Please to add comments
No comments yet. Be the first to comment!