반응형
Oracle에서 사용자에게 부여 된 권한 및 역할을 찾는 방법은 무엇입니까?
Linux, Oracle10g를 사용하고 있습니다. test라는 사용자를 만들었습니다. 세션 생성 및 동일한 사용자에게 사전 선택 권한이 부여되었습니다.
또한 동일한 사용자에게 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를 보십시오.
이 select 문으로 USER_SYS_PRIVS, USER_TAB_PRIVS, USER_ROLE_PRIVS 테이블을 확인하십시오.
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM 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 절을 제거하면됩니다.
일부 역할을 통해 사용자에게 권한이 부여 된 경우 아래 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';
이전 제안을 결합하여 개인 권한 (예 : '사용자'권한)을 결정한 후 다음을 사용하십시오.
-- 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
;
반응형
'Development Tip' 카테고리의 다른 글
Android : 하단의 버튼과 위의 목록보기를 어떻게 정렬 할 수 있습니까? (0) | 2020.10.20 |
---|---|
클래스의 매개 변수에 전달 된 null을 일치시키는 방법 (0) | 2020.10.20 |
Github가 저장소를 잘못된 언어로 변경합니다. (0) | 2020.10.20 |
클래스의 모든 메서드가 먼저 다른 메서드를 호출하는지 확인하는 방법은 무엇입니까? (0) | 2020.10.20 |
마지막으로 CSS 변경 (0) | 2020.10.20 |