اوراکل در نسخه 23.6 قابلیتهای جدیدی را در زمینه Data Redaction ارائه کرده است که یکی از این قابلیتها، پشتیبانی از Data Redaction در سطح view هست. در نسخه های قبلی، اگر در اجرای یک view به ستون Redact شده ای رجوع می شد، با خطای ORA-28094: SQL construct not supported by data reduction مواجه می شدیم اما در نسخه 23ai این قبیل Viewها را می توان بدون خطا اجرا کرد. در ادامه با سناریویی این مسئله را در دو نسخه 21c و 23ai بررسی می کنیم.
در ابتدا جدولی را ایجاد می کنیم:
SQL> create table tb(id number,name varchar2(14),last_name varchar2(14),salary number); Table created SQL> insert into tb values(1,’Ali’,’Geraili’,9850000); 1 row inserted SQL> commit; Commit complete
از روی این جدول، Viewای را به صورت زیر ایجاد می کنیم:
SQL> CREATE OR REPLACE VIEW vw_tb AS select id,lower(name) as first_name,lower(last_name) as last_name,salary+5000 as “sal+5000” from tb; View created
Redaction policy زیر را به جدول اضافه می کنیم:
SQL> BEGIN 2 DBMS_REDACT.ADD_POLICY( 3 object_schema => 'USEF', 4 object_name => 'TB', 5 policy_name => 'SALRY_REDACT', 6 expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''USEF''' 7 ); 8 END; 9 / PL/SQL procedure successfully completed
با تغییر در این پالیسی، ستون salary را به طور کامل از دید کاربر مخفی می کنیم(به استثنای کاربر usef و کاربرانی که مجوز EXEMPT REDACTION POLICY):
SQL> BEGIN 2 DBMS_REDACT.ALTER_POLICY ( 3 object_schema => 'USEF', 4 object_name => 'TB', 5 policy_name => 'SALRY_REDACT', 6 column_name => 'SALARY', 7 action => DBMS_REDACT.ADD_COLUMN, 8 function_type => DBMS_REDACT.FULL); 9 END; 10 / PL/SQL procedure successfully completed
کاربر جدیدی را ایجاد می کنیم و صرف دسترسی select و connect را به این کاربر می دهیم:
SQL> create user vahid identified by q; User created SQL> grant create session,read any table to vahid; Grant succeeded
به این کاربر وصل شده پرس و جو های زیر را اجرا می کنیم:
SQL> show user User is "VAHID" SQL> select * from usef.tb; ID NAME LAST_NAME SALARY ---- ----- -------------- ---------- 1 Ali Geraili 0 SQL> select * from usef.vw_tb; ID FIRST_NAME LAST_NAME sal+5000 ---- -------------- -------------- ---------- 1 ali geraili 0
هر دو پرس و جو بدون خطا اجرا شدند اما همین کار در اوراکل 21c برای View قابل انجام نیست:
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Jan 8 13:16:40 2025 SQL> select * from usef.tb; ID NAME LAST_NAME SALARY ---------- -------------- -------------- ---------- 1 Ali Geraili 0 SQL> select * from usef.vw_tb; ORA-28094: SQL construct not supported by data redaction