زمانی که مجوزی از نوع 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