ویژگی Data Redaction در اوراکل 12c

در صورتی که بخواهیم قسمتی از اطلاعات یک جدول، برای تعدادی از کاربران مخفی و یا غیرواقعی نمایش داده شود، می توانیم از ویژگی data redaction که از اوراکل 12c ارائه شد، استفاده کنیم به این صورت که ابتدا کاربر پرس و جویی را اجرا کرده و منتظر دریافت خروجی خواهد بود، بر روی داده درخواستی کاربر، عملیات redact انجام شده و در نهایت کاربر مورد نظر، داده را بر اساس آن فرمتی که از قبل تعریف کرده ایم، خواهد دید.

این ویژگی می تواند در زمینه های متعددی کاربرد داشته باشد به عنوان نمونه، می توان با کمک این ویژگی، سیاستی را وضع کرد که افراد فاقد صلاحیت، تنها قادر به مشاهده چهار رقم آخر شماره حساب افراد باشند به طور مثال، بر این مبنا، شماره حساب 5892101062121398 برای کاربر غیرمطمئن، به صورت ********1398 نمایش داده خواهد شد.

استفاده از ویژگی data redaction بار چندانی را به سیستم تحمیل نمی کند و در زمان بکاپ گیری با RMAN و تهیه دامپ و همچنین replication نادیده گرفته خواهد شد.

تبدیل داده با استفاده از این ویژگی، در سطوح مختلفی قابل انجام می باشد که در ادامه در مورد دو سطح Full و Partial مطالبی را عنوان کرده ایم.

redaction در سطح full

با redaction در سطح full، کاربر مورد نظر، حتی امکان مشاهده بخشی از داده را هم نخواهد داشت و بطور کلی، مقدار ثابتی را به ازای هر رکورد، به کاربر برمی گرداند.

به طور پیش فرض، ستونی که نوع داده آن از جنس VARCHAR2 می باشد، حاصل redact شده آن، برابر با ‘ ‘ خواهد بود و اگر نوع داده آن NUMBER باشد، عدد 0 به کاربر برمی گردد همچنین نوع داده DATE، سبب نمایش مقدار 01-JAN-01 به کاربر خواهد شد.

مقادیر پیش فرض، با استفاده از پروسیجر DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES قابل تغییر می باشند.

مثال زیر را ببینید.

مثال : در این مثال خواهیم دید که کاربری به نام ali، به دلیل redact شدن اطلاعات، نخواهد توانست مقدار واقعی کد حقوقی افراد را به طور کلی(در سطح FULL) ببیند.

create user ali identified by ali ;

grant select any table to ali;

grant create session to ali;

با افزودن policy زیر، کاربر ali نخواهد توانست مقادیر ستون SALARY_CODE را از جدول PERSON مشاهده کند:

connect usef/usef

exec DBMS_REDACT.drop_policy(object_name => ‘person’,policy_name => ‘pol1’);

BEGIN

DBMS_REDACT.add_policy(object_schema => ‘USEF’

,object_name => ‘PERSON’

,policy_name => ‘pol1’

,expression => ‘SYS_CONTEXT(”USERENV”,”SESSION_USER”) = ”ALI”’

,column_name => ‘SALARY_CODE’

,function_type => dbms_redact.FULL);

END;

redaction در سطح Partial

در سطح Partial، این امکان وجود دارد تا قسمتی از داده به شکل واقعی به کاربر نمایش داده شود.

5892101038541398 ==> ********1398

مثال زیر را ببینید.

مثال: قصد داریم در این مثال، تنها سه رقم اخر کد پرسنلی افراد، به کاربرانی که مجوز لازم را ندارند، نمایش داده شود و 6 رقم ابتدایی، با عدد 9 پر شود:

exec DBMS_REDACT.drop_policy(object_name => ‘person’,policy_name => ‘pol1’);

begin

DBMS_REDACT.ADD_POLICY(

  object_schema => ‘USEF’,

  object_name => ‘PERSON’,

  column_name => ‘PER_CODE’,

policy_name => ‘pol1’,

  function_type => DBMS_REDACT.PARTIAL,

  function_parameters => ‘9,1,6’,

  expression => ‘1=1’ );

END;

انچه که کاربر ali خواهد دید، به صورت زیر خواهد بود:

connect ali/ali

select PER_CODE from USEF.PERSON where id=’2025823837′;

999999357

در پایان توجه شما را به سه نکته زیر جلب می کنم:

1.هر کاربری که مجوز EXEMPT REDACTION POLICY را داشته باشد، recation برای آن لحاظ نخواهد شد.

2.این ویژگی برای کاربر sys و هر کاربری که نقش dba را دارد، لحاظ نخواهد شد.

3.کاربری که داده واقعی رانمی بیند، در زمان اجرای دستور CREATE TABLE AS SELECT، به مجوز EXEMPT DDL REDACTION POLICY نیاز دارد تا داده واقعی را در جدول جدید درج کند.

.

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.