ユーザーXを使用してOracleデータベースにログインし、ユーザーXがcreate role
コマンドを使用していくつかのロールを作成するとします。ユーザーXがロールの所有者であることを知りたいですか?ユーザーXが作成したすべてのロールを選択できますか?
Oracle Databaseのロールには所有者がなく、ディレクトリには所有者がありません。
CREATE ROLE
またはSYSDBA
特権を持つユーザーがロールを作成すると、そのロールWITH ADMIN OPTION
が自動的に割り当てられます。これは、ユーザーが特権を付与されていても、その後そのロールを他のユーザーに付与できることを意味しますCREATE ROLE
はユーザーから取り消されます。
DBA_ROLE_PRIVS
ビューをクエリするユーザーに割り当てられているロールを確認できます。現在のユーザーに割り当てられているロールを知りたい場合は、USER_ROLE_PRIVS
を確認できます。
また、同じ名前のロールがすでに存在する場合、ユーザーはロールを作成できません。ただし、ロールの作成と付与を監査できます。これは、AUDIT ROLEステートメントを使用して(何らかの理由でNOAUDIT ROLE
で無効にされた場合)、次にDBA_AUDIT_TRAIL
ビューをクエリして実行できます。
ロールには所有者がいませんが、dba_role_privsは、特権に付与されたユーザーとロールの両方を表示します。
--This lists both users and roles
SELECT * FROM dba_role_privs
WHERE admin_option = 'YES'
order by grantee, granted_role;
Dba_usersへの内部結合で、ロールに管理オプションを持つユーザーのみを表示します。
--This lists only users with admin option on roles
SELECT rp.grantee, rp.granted_role, rp.admin_option
FROM dba_role_privs rp
JOIN dba_users u
ON rp.grantee = u.username
WHERE admin_option = 'YES'
ORDER BY grantee, granted_role;
役割に対する管理者オプションがある場合は、その役割を削除できます。たとえば、役割の削除特権を持っていないか、「所有」していなくても、役割を作成していません。