web-dev-qa-db-ja.com

Oracleでユーザーに付与されている権限とロールを確認する方法

私はLinux、Oracle10gを使っています。 testというユーザーを1人作成しました。そしてセッション作成を許可され、同じユーザーに辞書のパーミッションを選択します。

私はまたsysdbaとsysoperの役割を同じユーザーに与えました。

今、私はユーザーに与えられたすべての特権と役割を表示したいです。次のクエリを見つけましたが、セッションを作成して辞書の特権を選択するだけです。

select privilege 
from dba_sys_privs 
where grantee='SAMPLE' 
order by 1;

問題を解決するために助けてください。

ありがとう

70
Abhimanyu garg

http://docs.Oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665 ]をご覧ください。

USER_SYS_PRIVS、USER_TAB_PRIVS、USER_ROLE_PRIVSテーブルを確認してください。

47
VAV

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';
63
user2668478

他の答えのどれも私のために働かなかった従って私は私自身の解決策を書いた:

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句を削除します。

44
Mocking

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';
10
upog

あなたの個人的な許可(すなわち '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);
7
ShamrockCS
SELECT * 
FROM DBA_ROLE_PRIVS 
WHERE UPPER(GRANTEE) LIKE '%XYZ%';
1
user2615480
select * 
from ROLE_TAB_PRIVS 
where role in (
    select granted_role
    from dba_role_privs 
    where granted_role in ('ROLE1','ROLE2')
)
1
shans

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
;
0
dave