рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣рдореЗрд╢рд╛ рдЙрдарддрд╛ рд╣реИред рдПрдХ рд░рд╛рд╕реНрддрд╛ рдпрд╛ рджреВрд╕рд░рд╛ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдпрд╣ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реМрдВрдк рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдбреЗрдЯрд╛ рдХреА рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдпрд╛ рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПред
рд▓реЗрдЦ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдВрд╢рд┐рдХ рдЫрд┐рдкрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдЦреНрддреА рд╕реЗ рд╕реАрдорд┐рдд рд╣реИред рдпрд╣рд╛рдБ рд╣рдо
152-FZ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрд╕реНрдХрд░рдг 8 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, Oracle рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ
рд╡рд░реНрдЪреБрдЕрд▓ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ (VPD) рд╣реИ ред VPD, рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рднрд╛рдЧ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдиреБрдХрд╕рд╛рди рдЧреБрдгреЛрдВ рд╕реЗ рдЙрдкрдЬрд╛ рд╣реИ - рдЫрд┐рдкрд╛рдирд╛ рдХреЗрд╡рд▓ рдкреВрд░реНрдг рд░рд┐рдХреЙрд░реНрдб рд╕рдВрднрд╡ рд╣реИред рдпрд╣ sql рдХреНрд╡реЗрд░реА рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Oracle 12c рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, sql рдХреНрд╡реЗрд░реА (рдкреВрд░реЗ рдпрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ) рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ
рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛ рд░рд┐рдбрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖
рдиреАрддрд┐рдпрд╛рдВ рд▓рд╛рдЧреВ рд╣реЛрддреА
рд╣реИрдВ ред
рд╕рднреА рдбреЗрдЯрд╛ рд░рд┐рдбрдХреНрд╢рди рдкреНрд░рдмрдВрдзрди
DBMS_REDACT рдкреИрдХреЗрдЬ рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдкрд░ рдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдПрдХреНрдкрд░реНрдЯ рд░рд┐рдбрдХреНрд╢рди рдкреЙрд▓реАрд╕реА рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдбреЗрдЯрд╛ рд░рд┐рдбрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдПрдХ рддрд╛рд▓рд┐рдХрд╛ CLIENT_INFO рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ - рдЬрдиреНрдо рддрд┐рдерд┐, рдлреЛрди, рдИрдореЗрд▓ рдФрд░ рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб рдирдВрдмрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рднреВрдорд┐рдХрд╛ R_VIP рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рд▓рд┐рдХ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрддреЗ рд╣реИрдВред рдмрд╛рдХреА рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд░рд┐рдХреЙрд░реНрдб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), 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');
рд╣рдо redact_client_info рдирд╛рдордХ рдПрдХ рдиреАрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрдиреНрдо рдХреА рддрд╛рд░реАрдЦ рдХреЛ 1 рдирдВрдмрд░ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдиреАрддрд┐ 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''' ); END; /
рд╣рдо рдкреЙрд▓рд┐рд╕реА рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╝реЛрди рдХреЗ рдЕрдВрддрд┐рдо 5 рдЕрдВрдХ рджрд┐рдЦрд╛рдиреЗ рдХреА рд╢рд░реНрдд рд░рдЦрддреЗ рд╣реИрдВ:
рдиреАрддрд┐ 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; /
рд╣рдо рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ R_VIP рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рд╣реИ:
SQL> select f_name, name, birthday, email, phone, ccard from test.client_info; F_NAME NAME BIRTHDAY EMAIL PHONE CCARD
рдФрд░ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ:
SQL> select f_name, name, birthday, email, phone, ccard from test.client_info; F_NAME NAME BIRTHDAY EMAIL PHONE CCARD
рдирддреАрдЬрддрди, рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рдорд╛рди рдЬрд┐рдирдХреЗ рдкрд╛рд╕ R_VIP рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рд░рд┐рдбрдиреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рдбреЗрдЯрд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдкрд▓рдмреНрдзрддрд╛ред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬреЛрдбрд╝
рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЖрдЧреЗ рдХреА рдЪрд░реНрдЪрд╛ рдФрд░ рдЕрдзреНрдпрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдореБрдЦреМрдЯрд╛ рд╣реИред рдпрд╛рдиреА, рдЬрд╣рд╛рдВ рд╣рд┐рд╕реНрд╕рд╛ рдЦреБрд▓реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд╣рд╛рдВ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╕рднреА рдЦреБрд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
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