نکته ای در مورد Role و Privilege در اوراکل

زمانی که مجوزی از نوع object privilege و یا system privilege به کاربری داده می شود(و یا از کاربر گرفته(revoke) می شود)، بلافاصله sessionهای ان user که به دیتابیس متصل هستند، از این مجوزها بهره مند خواهند شد:

–session 1:

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 16 19:48:16 2021
Version 19.11.0.0.0
SQL> show user
USER is "ALI"
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION

–session 2:

SQL> show user
USER is "USEF"
SQL> grant select any table to ALI;
Grant succeeded.

–session 1:

SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
SELECT ANY TABLE

اما این مسئله برای role صادق نیست و در صورت grant یا revoke کردن یک roleء، sessionهای جاری متاثر نخواهند شد مگر آنکه از دستور SET ROLE استفاده کنند:

–session 2:

SQL> show user
USER is "USEF"
SQL> grant dba to ALI;  
Grant succeeded.

–session 1:

SQL> show user
USER is "ALI"
SQL> select * from session_roles;
no rows selected

بنابر آنچه که بیان کردیم، دو راهکار در این شرایط متصور است راهکار اول؛؛ استفاده از دستور SET ROLE توسط sessionای که به دیتابیس وصل است:

SQL> set role dba;
Role set.
SQL> select count(*) from session_roles;
  COUNT(*)
----------
        21

راهکار دوم؛؛ خروج از دیتابیس و اتصال مجدد به آن است:

SQL> exit
[oracle@oLinux7 ~]$ sqlplus "ALI/g@192.168.1.20:1521/pdb1"
SQL> select count(*) from session_roles;
  COUNT(*)
----------
        21


ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

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

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