CREATE TABLE CLIENT_INFO ( ID NUMBER, F_NAME VARCHAR2(64), /* */ NAME VARCHAR2(64), /* */ S_NAME VARCHAR2(64), /* */ BIRTHDAY DATE, /* */ PHONE VARCHAR2(32), /* */ EMAIL VARCHAR2(64), /* email */ CCARD VARCHAR2(32), /* */ CONSTRAINT "CLIENT_INFO_PK" PRIMARY KEY ("ID") ); insert into CLIENT_INFO values(1, '', '', '', to_date('15-05-1986', 'DD-MM-YYYY'), '79763334589', 'ivan@dom2.ru', '5767881897856776');
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'TEST', object_name => 'CLIENT_INFO', column_name => 'BIRTHDAY', policy_name => 'redact_client_info', function_type => DBMS_REDACT.PARTIAL, /* */ function_parameters => 'Md01Y', /* */ expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''' /* - R_VIP */ ); END; /
BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'TEST', object_name => 'CLIENT_INFO', column_name => 'PHONE', policy_name => 'redact_client_info', function_type => DBMS_REDACT.REGEXP, /* */ regexp_pattern => '\d+(\d{5})$', regexp_replace_string => '******\1', regexp_position => DBMS_REDACT.RE_BEGINNING, regexp_occurrence => DBMS_REDACT.RE_ALL, expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''', action => DBMS_REDACT.ADD_COLUMN ); END; /
BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'TEST', object_name => 'CLIENT_INFO', column_name => 'EMAIL', policy_name => 'redact_client_info', function_type => DBMS_REDACT.REGEXP, regexp_pattern => DBMS_REDACT.RE_PATTERN_EMAIL_ADDRESS, /* */ regexp_replace_string => DBMS_REDACT.RE_REDACT_EMAIL_DOMAIN, /* */ expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''', action => DBMS_REDACT.ADD_COLUMN ); END; /
BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'TEST', object_name => 'CLIENT_INFO', column_name => 'CCARD', policy_name => 'redact_client_info', function_type => DBMS_REDACT.REGEXP, regexp_pattern => DBMS_REDACT.RE_PATTERN_CC_L6_T4, regexp_replace_string => DBMS_REDACT.RE_REDACT_CC_MIDDLE_DIGITS, expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''', action => DBMS_REDACT.ADD_COLUMN ); END; /
SQL> select f_name, name, birthday, email, phone, ccard from test.client_info; F_NAME NAME BIRTHDAY EMAIL PHONE CCARD ---------- ---------- --------------- --------------- --------------- ---------------- 01-MAY-86 ivan@xxxxx.com ******34589 576788XXXXXX6776
SQL> select f_name, name, birthday, email, phone, ccard from test.client_info; F_NAME NAME BIRTHDAY EMAIL PHONE CCARD ---------- ---------- --------------- --------------- --------------- ---------------- 15-MAY-86 ivan@dom2.ru 79763334589 5767881897856776
create table log (s varchar2(128)); create or replace function f(ds varchar2) return varchar2 as PRAGMA AUTONOMOUS_TRANSACTION; begin insert into log values(ds); commit; return ds; end; SQL> select name, email from client_info c where f(email) like '%dom%'; NAME EMAIL ---------- --------------- ivan@xxxxx.com SQL> select * from log; S ---------------- ivan@dom2.ru ivan@gmail.com
Source: https://habr.com/ru/post/185768/
All Articles