اگر کاربری مجوزی را به کاربر دیگر اهدا کند، این عملیات از طریق ویوی ALL_TAB_PRIVS_MADE قابل ردیابی است(البته با رعایت شرایطی!) و این ویو در کنار ویوی USER_TAB_PRIVS_RECD مشخص می کند که مجوز توسط کدام کاربر به کاربر دیگر اهدا شده است.
برای مثال در قسمت زیر، کاربر usef مجوز select on ali.tbl1 را به کاربر vahid اهدا می کند:
SQL> create user usef identified by a; User created. SQL> create user vahid identified by a; User created. SQL> grant create session to vahid,usef; Grant succeeded.
SQL> grant select on ali.tbl1 to usef with grant option; Grant succeeded. SQL> conn usef/a Connected. SQL> show user User is "USEF" SQL> grant select on ali.tbl1 to vahid; Grant succeeded.
SQL> conn ali/a Connected. SQL> select grantee, grantor,privilege, table_name from user_tab_privs_made where GRANTEE='VAHID'; GRANTEE GRANTOR PRIVILEGE TABLE_NAME ----------- ---------- ---------- ---------- VAHID USEF SELECT TBL1
همانطور که می بینید، با اجرای پرس و جوی فوق توسط کاربر ali، خواهیم دید که مجوز select on ali.tbl1 توسط کاربر usef به کاربر VAHID اختصاص داده شده است. البته با اجرای ویوی USER_TAB_PRIVS_RECD هم به این نتیجه خواهیم رسید:
SQL> conn vahid/a Connected. SQL> select owner,table_name,grantor,privilege,type from USER_TAB_PRIVS_RECD; OWNER TABLE_NAME GRANTOR PRIVILEGE TYPE ---------- ---------- ---------- ---------- ------------ ALI TBL1 USEF SELECT TABLE
در این شرایط با حذف کاربر usef، دسترسی داده شده به کاربر vahid از بین خواهد رفت و به تبع آن، این دو ویو هم اطلاعاتی را در این زمینه بر نمی گردانند:
SQL> drop user usef; User dropped. SQL> conn ali/a Connected. SQL> select owner,table_name,grantor,privilege,type from USER_TAB_PRIVS_RECD; no rows selected SQL> select * from ALI.TBL1; ORA-00942: table or view does not exist
با اندکی تغییر در سناریوی قبلی، نقش dba را به کاربر usef اختصاص می دهیم و بعد از ان کاربر usef، دسترسی select on ali.tbl1 را به کاربر vahid اهدا می کند، با این تغییر، دو ویوی فوق، کاربر ALI را به عنوان grantor معرفی خواهند کرد:
SQL> create user usef identified by a; User created. SQL> grant dba to usef; Grant succeeded.
SQL> conn usef/a Connected. SQL> grant select on ali.tbl1 to vahid; Grant succeeded.
SQL> conn vahid/a Connected. SQL> select owner,table_name,grantor,privilege,type from USER_TAB_PRIVS_RECD; OWNER TABLE_NAME GRANTOR PRIVILEGE TYPE ---------- ---------- ---------- ---------- ------------------------ ALI TBL1 ALI SELECT TABLE SQL> conn ali/a Connected. SQL> select grantee, grantor, table_name from user_tab_privs_made where GRANTEE='VAHID'; GRANTEE GRANTOR TABLE_NAME ----------- ---------- ---------- VAHID ALI TBL1