web-dev-qa-db-ja.com

オラクルのロールには所有者がいますか?

ユーザーXを使用してOracleデータベースにログインし、ユーザーXがcreate roleコマンドを使用していくつかのロールを作成するとします。ユーザーXがロールの所有者であることを知りたいですか?ユーザーXが作成したすべてのロールを選択できますか?

8
rahim asgari

Oracle Databaseのロールには所有者がなく、ディレクトリには所有者がありません。

CREATE ROLEまたはSYSDBA特権を持つユーザーがロールを作成すると、そのロールWITH ADMIN OPTIONが自動的に割り当てられます。これは、ユーザーが特権を付与されていても、その後そのロールを他のユーザーに付与できることを意味しますCREATE ROLEはユーザーから取り消されます。

DBA_ROLE_PRIVSビューをクエリするユーザーに割り当てられているロールを確認できます。現在のユーザーに割り当てられているロールを知りたい場合は、USER_ROLE_PRIVSを確認できます。

また、同じ名前のロールがすでに存在する場合、ユーザーはロールを作成できません。ただし、ロールの作成と付与を監査できます。これは、AUDIT ROLEステートメントを使用して(何らかの理由でNOAUDIT ROLEで無効にされた場合)、次にDBA_AUDIT_TRAILビューをクエリして実行できます。

4

ロールには所有者がいませんが、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;

役割に対する管理者オプションがある場合は、その役割を削除できます。たとえば、役割の削除特権を持っていないか、「所有」していなくても、役割を作成していません。

0
Sparkle