私はLinux、Oracle10gを使っています。 testというユーザーを1人作成しました。そしてセッション作成を許可され、同じユーザーに辞書のパーミッションを選択します。
私はまたsysdbaとsysoperの役割を同じユーザーに与えました。
今、私はユーザーに与えられたすべての特権と役割を表示したいです。次のクエリを見つけましたが、セッションを作成して辞書の特権を選択するだけです。
select privilege
from dba_sys_privs
where grantee='SAMPLE'
order by 1;
問題を解決するために助けてください。
ありがとう
http://docs.Oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665 ]をご覧ください。
USER_SYS_PRIVS、USER_TAB_PRIVS、USER_ROLE_PRIVSテーブルを確認してください。
VAVの答えに加えて、最初のものは私の環境で最も役に立ちました
select * from USER_ROLE_PRIVS where USERNAME='SAMPLE';
select * from USER_TAB_PRIVS where Grantee = 'SAMPLE';
select * from USER_SYS_PRIVS where USERNAME = 'SAMPLE';
他の答えのどれも私のために働かなかった従って私は私自身の解決策を書いた:
Oracle 11g以降
USERを希望のユーザー名に置き換えます。
許可されたロール:
SELECT *
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'USER';
ユーザーに直接付与される権限:
SELECT *
FROM DBA_TAB_PRIVS
WHERE GRANTEE = 'USER';
ユーザーに付与されたロールに付与された権限:
SELECT *
FROM DBA_TAB_PRIVS
WHERE GRANTEE IN (SELECT granted_role
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'USER');
与えられたシステム特権:
SELECT *
FROM DBA_SYS_PRIVS
WHERE GRANTEE = 'USER';
現在接続しているユーザーを検索する場合は、テーブル名のDBAをUSERに置き換えてWHERE句を削除します。
IF権限がいくつかのロールを通じてユーザーに与えられている場合は、以下のSQLを使用できます。
select * from ROLE_ROLE_PRIVS where ROLE = 'ROLE_NAME';
select * from ROLE_TAB_PRIVS where ROLE = 'ROLE_NAME';
select * from ROLE_SYS_PRIVS where ROLE = 'ROLE_NAME';
あなたの個人的な許可(すなわち 'USER'許可)を決定するために以前の提案を組み合わせて、そしてこれを使用してください:
-- your permissions
select * from USER_ROLE_PRIVS where USERNAME= USER;
select * from USER_TAB_PRIVS where Grantee = USER;
select * from USER_SYS_PRIVS where USERNAME = USER;
-- granted role permissions
select * from ROLE_ROLE_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_TAB_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_SYS_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
SELECT *
FROM DBA_ROLE_PRIVS
WHERE UPPER(GRANTEE) LIKE '%XYZ%';
select *
from ROLE_TAB_PRIVS
where role in (
select granted_role
from dba_role_privs
where granted_role in ('ROLE1','ROLE2')
)
sQLを常に再利用可能にする:-:)
-- ===================================================
-- &role_name will be "enter value for 'role_name'".
-- Date: 2015 NOV 11.
-- sample code: define role_name=&role_name
-- sample code: where role like '%&&role_name%'
-- ===================================================
define role_name=&role_name
select * from ROLE_ROLE_PRIVS where ROLE = '&&role_name';
select * from ROLE_SYS_PRIVS where ROLE = '&&role_name';
select role, privilege,count(*)
from ROLE_TAB_PRIVS
where ROLE = '&&role_name'
group by role, privilege
order by role, privilege asc
;