اهدای حداقلی مجوزها به کاربران، یکی از دغدغه های مهم dba برای ایجاد محیطی امن می باشد در صورتی که تعداد کاربران و به تبع آن، تنوع درخواست ها زیاد باشد، اهدای حداقلی مجوزها، امر بسیار پیچیده ای خواهد بود.
از اوراکل 12c، ویژگی جدیدی به نام privilege analysis ارائه شد که می توان از طریق آن، مجوزهای مورد استفاده کاربران را در یک بازه زمانی مشخص، مانیتور نمود و در نهایت، مجوزهای اضافی را(در صورت وجود!)، از کاربران سلب کرد.
با کمک این قابلیت می توان در سطوح مختلف اعم از DATABASE ،ROLE ،CONTEXT و ROLE_AND_CONTEXT مجوزها را مانیتور نمود. این کار با استفاده از پکیج DBMS_PRIVLEGE_CAPTURE قابل انجام است.
مراحل انجام کار، به صورت زیر می باشد:
مرحله اول: ابتدا با استفاده از پروسیجر create_capture ضمن تعیین سطح مانیتورینگ، یک privilege analysis ایجاد می کنیم:
–database level
exec DBMS_PRIVILEGE_CAPTURE.create_capture(name => ‘mycap1’,type => DBMS_PRIVILEGE_CAPTURE.g_database);
–CONTEXT level
exec DBMS_PRIVILEGE_CAPTURE.create_capture(name=> ‘mycap1’,type=> DBMS_PRIVILEGE_CAPTURE.g_context,condition=> ‘SYS_CONTEXT(”USERENV”, ”SESSION_USER”) = ”USEF”’);
–ROLE level
exec DBMS_PRIVILEGE_CAPTURE.create_capture( name => ‘us_role’,type=>DBMS_PRIVILEGE_CAPTURE.g_role,roles=> role_name_list(‘DBA’,’RESOURCE’));
–ROLE and CONTEXT level
exec DBMS_PRIVILEGE_CAPTURE.create_capture( name=> ‘us_role_cont’,type=> DBMS_PRIVILEGE_CAPTURE.g_role_and_context, roles=> role_name_list(‘DBA’, ‘RESOURCE’),condition=> ‘SYS_CONTEXT(”USERENV”, ”SESSION_USER”) IN (”USEF”,”USEF”)’);
مرحله دوم: سپس با کمک پروسیجر enable_capture ، استفاده کاربران از مجوزها را در سطح تعیین شده، مانیتور می کنیم:
exec DBMS_PRIVILEGE_CAPTURE.enable_capture(‘mycap1’);
مرحله سوم: پس از گذشت مدت زمانی از شروع مانیتورینگ، با استفاده از پروسیجر disable_capture مانیتورینگ را خاتمه می دهیم:
exec DBMS_PRIVILEGE_CAPTURE.disable_capture(‘mycap1’);
مرحله چهارم: در نهایت، برای مشاهده خروجی و ایجاد گزارش، پروسجر generate_result را صدا می زنیم:
exec DBMS_PRIVILEGE_CAPTURE.generate_result(‘mycap1’);
برای مشاهده خروجی این تحلیل، ویوهای مختلفی وجود دارد نظیر dba_used_privs.
همچنین برای حذف اطلاعات مانیتورینگ انجام شده از پروسیجر drop_capture استفاده می کنیم:
exec DBMS_PRIVILEGE_CAPTURE.drop_capture(name => ‘mycap1’);
مثال: قصد داریم مجوزهای مورد استفاده توسط کاربری به نام usef را مانیتور کنیم به این کاربر مجوز dba را اهدا کرده ایم. با انجام مانیتورینگ، مشخص خواهد شد که کاربر usef، صرفا از کدام یک از مجوزهای موجود در نقش dba استفاده می کند.
ایجاد کاربر usef و اهدای نقش dba:
create user usef identified by usef;
grant dba to usef;
ایجاد capture به همراه تعیین سطح آن:
exec SYS.DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(name => ‘mycap1’,type => dbms_privilege_capture.g_role_and_context,roles => role_name_list (‘DBA’),condition => ‘SYS_CONTEXT (”USERENV”,”SESSION_USER”)=”USEF”’);
exec DBMS_PRIVILEGE_CAPTURE.enable_capture(‘mycap1‘);
فرض کنید کاربر usef وارد بانک شده و دستوراتی را اجرا می کند:
SQL> connect usef/usef;
Connected.
SQL> drop table usef.person3;
Table dropped.
SQL> alter tablespace usef_tbs offline;
Tablespace altered.
SQL> alter tablespace usef_tbs online;
Tablespace altered.
SQL> create view v_u as select * from v$datafile;
ORA-01031: insufficient privileges
SQL> create view v_u as select * from user_tables;
View created.
با گذشت مدت زمانی از این مانیتورینگ، آن را متوقف می کنیم:
exec DBMS_PRIVILEGE_CAPTURE.disable_capture(‘mycap1’);
exec DBMS_PRIVILEGE_CAPTURE.generate_result(‘mycap1’);
برای مشاهده مجوزهای استفاده شده توسط کاربر usef، به ویوی dba_used_privs مراجعه می کنیم:
SQL> select capture,username,used_role,sys_priv from dba_used_privs l where l.capture=’mycap1’;
Comments (2)