หากสิทธิ์นั้นได้รับโดยตรงหรือเข้ากับบทบาทเงินช่วยเหลือจะปรากฏขึ้น DBA_TAB_PRIVS
SELECT grantee, privilege
FROM dba_tab_privs
WHERE owner = 'B'
AND table_name = 'MYPACKAGE'
AND privilege = 'EXECUTE'
หากgrantee
บทบาทนั้นคุณจะต้องดูdba_role_privs
เพื่อดูว่าผู้ใช้ (หรือบทบาท) ใดที่ได้รับบทบาทนั้นและปฏิบัติตามสายโซ่หากคุณมีบทบาทที่ได้รับบทบาทอื่น หากคุณต้องการบัญชีสำหรับผู้ใช้ที่มีการให้สิทธิ์เนื่องจาก (อันตรายมาก) ANY
ทุน (เช่นEXECUTE ANY PROCEDURE
) นั่นจะต้องใช้แบบสอบถามแยกต่างหาก
หากคุณต้องการที่จะมีความซับซ้อนมากกว่าเพียงแค่ทำแบบสอบถามตรงๆdba_tab_privs
คุณอาจจะดีกว่าถ้าใช้สคริปต์ของPete Finniganเช่นwho_has_priv.sql
(หรือwho_has_priv_procedure.sql
) Pete อาจเป็นผู้เชี่ยวชาญชั้นนำเกี่ยวกับความปลอดภัยของ Oracle ดังนั้นสิ่งเหล่านี้มีแนวโน้มที่จะอธิบายในทุกกรณีที่เป็นไปได้มากกว่าทุกสิ่งที่ฉันจะพยายามทำร่วมกัน