Oracle에서 사용자의 모든 권한을 표시하는 방법은 무엇입니까?
누군가가 sql-console에서 특정 사용자의 모든 권한 / 규칙을 표시하는 방법을 알려주시겠습니까?
아래보기를 시도 할 수 있습니다.
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
DBA 및 기타 고급 사용자는 DBA_
기존 버전을 사용하여 다른 사용자에게 부여 된 권한을 사용할 수 있습니다. 문서 에서 다룹니다 .
바로보기 는 사용자 에게 직접 부여 된 권한 만 표시합니다 . 찾는 모든 역할을 통해 간접적으로 부여 된 권한은 더 복잡 재귀 SQL 문이 필요합니다.
select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;
당신이 원하는 정도에 따라 다양한 펼쳐보기를 다니고 있습니다. 개인적으로 Pete Finnigan의 find_all_privs 펼치기를 사용 합니다.
직접 작성하려는 경우 쿼리가 다소 어려워집니다. 사용자는에서 볼 수있는 시스템 권한을받을 수 있습니다 DBA_SYS_PRIVS
. 에서 볼 수있는 객체 권한을 얻을 수 있습니다 DBA_TAB_PRIVS
. 또한 다음에서 볼 수있는 역할을 부여 할 수 있습니다. DBA_ROLE_PRIVS
(역할은 다음과 같거나 아닐 수 있고 암호도 필요할 수 있습니다. 따라서 사용자에게 역할이 부여되고 사용자가 반드시 자신의 권한을 사용할 수 있음을 의미합니다. 기본적으로 역할을 통해 금액). 하지만 그 역할은, 부여 된 시스템 권한, 특권 및보고 볼 수있는 추가 역할을 할 수 있습니다 ROLE_SYS_PRIVS
, ROLE_TAB_PRIVS
하고 ROLE_ROLE_PRIVS
. Pete의 펼쳐지는 관계를 통해 사용자에게 전달되는 모든 권한을 보여줍니다.
또 다른 유용한 리소스 :
http://psoug.org/reference/roles.html
- DBA_SYS_PRIVS
- DBA_TAB_PRIVS
- DBA_ROLE_PRIVS
아래 코드를 사용하여 모든 사용자로부터 모든 권한 목록을 얻을 수 있습니다.
select * from dba_sys_privs
반면 Raviteja Vutukuri의 응답 작품과 함께 신속하게, 그것은 필터를 변화 특히 유연하지 그리고 프로그래밍을 찾고있는 것이 너무 많은 도움이되지 않습니다. 그래서 내 자신의 쿼리를 작성했습니다.
SELECT
PRIVILEGE,
OBJ_OWNER,
OBJ_NAME,
USERNAME,
LISTAGG(GRANT_TARGET, ',') WITHIN GROUP (ORDER BY GRANT_TARGET) AS GRANT_SOURCES, -- Lists the sources of the permission
MAX(ADMIN_OR_GRANT_OPT) AS ADMIN_OR_GRANT_OPT, -- MAX acts as a Boolean OR by picking 'YES' over 'NO'
MAX(HIERARCHY_OPT) AS HIERARCHY_OPT -- MAX acts as a Boolean OR by picking 'YES' over 'NO'
FROM (
-- Gets all roles a user has, even inherited ones
WITH ALL_ROLES_FOR_USER AS (
SELECT DISTINCT CONNECT_BY_ROOT GRANTEE AS GRANTED_USER, GRANTED_ROLE
FROM DBA_ROLE_PRIVS
CONNECT BY GRANTEE = PRIOR GRANTED_ROLE
)
SELECT
PRIVILEGE,
OBJ_OWNER,
OBJ_NAME,
USERNAME,
REPLACE(GRANT_TARGET, USERNAME, 'Direct to user') AS GRANT_TARGET,
ADMIN_OR_GRANT_OPT,
HIERARCHY_OPT
FROM (
-- System privileges granted directly to users
SELECT PRIVILEGE, NULL AS OBJ_OWNER, NULL AS OBJ_NAME, GRANTEE AS USERNAME, GRANTEE AS GRANT_TARGET, ADMIN_OPTION AS ADMIN_OR_GRANT_OPT, NULL AS HIERARCHY_OPT
FROM DBA_SYS_PRIVS
WHERE GRANTEE IN (SELECT USERNAME FROM DBA_USERS)
UNION ALL
-- System privileges granted users through roles
SELECT PRIVILEGE, NULL AS OBJ_OWNER, NULL AS OBJ_NAME, ALL_ROLES_FOR_USER.GRANTED_USER AS USERNAME, GRANTEE AS GRANT_TARGET, ADMIN_OPTION AS ADMIN_OR_GRANT_OPT, NULL AS HIERARCHY_OPT
FROM DBA_SYS_PRIVS
JOIN ALL_ROLES_FOR_USER ON ALL_ROLES_FOR_USER.GRANTED_ROLE = DBA_SYS_PRIVS.GRANTEE
UNION ALL
-- Object privileges granted directly to users
SELECT PRIVILEGE, OWNER AS OBJ_OWNER, TABLE_NAME AS OBJ_NAME, GRANTEE AS USERNAME, GRANTEE AS GRANT_TARGET, GRANTABLE, HIERARCHY
FROM DBA_TAB_PRIVS
WHERE GRANTEE IN (SELECT USERNAME FROM DBA_USERS)
UNION ALL
-- Object privileges granted users through roles
SELECT PRIVILEGE, OWNER AS OBJ_OWNER, TABLE_NAME AS OBJ_NAME, GRANTEE AS USERNAME, ALL_ROLES_FOR_USER.GRANTED_ROLE AS GRANT_TARGET, GRANTABLE, HIERARCHY
FROM DBA_TAB_PRIVS
JOIN ALL_ROLES_FOR_USER ON ALL_ROLES_FOR_USER.GRANTED_ROLE = DBA_TAB_PRIVS.GRANTEE
) ALL_USER_PRIVS
-- Adjust your filter here
WHERE USERNAME = 'USER_NAME'
) DISTINCT_USER_PRIVS
GROUP BY
PRIVILEGE,
OBJ_OWNER,
OBJ_NAME,
USERNAME
;
장점 :
- 어떤 역할을 통하는 지 여부 여부 같은 다양한 정보를 해당
WHERE
절 하나만 변경하여 쉽게 필터링 할 수 있습니다 . - 단일 쿼리 정신적으로 결과를 함께 필요가 없습니다.
- 권한을 부여 할 수 있는지 여부와 권한의 다른 소스에 걸쳐 하위 객체 ( "계층 적"부분)에 대한 권한을 포함하는지 여부에 대한 문제를 해결합니다.
- 권한의 모든 출처를 나열하기 때문에 권한을 취소하기 위해 필요한 모든 것을 쉽게 볼 수 있습니다.
- 테이블 및 시스템 권한을 하나의 일관된보기로 결합 하여 사용자의 모든 권한을 한 번 에 나열 할 수 있습니다.
- 이 모든 것을 토해내는 함수가 아니라 쿼리입니다
DBMS_OUTPUT
(Pete Finnigan의 링크 된 스크립트와 비교). 따라서 프로그래밍 방식으로 사용하고 내보낼 때 유용합니다. - 필터는 반복되지 않습니다. 한 번만 나타납니다. 이렇게하면 쉽게 변경할 수 있습니다.
- 각 개인이 검사해야하는 경우 하위 쿼리를 쉽게 꺼낼 수 있습니다
GRANT
.
모든 권한을 표시하려면 :
system_privilege_map에서 이름을 선택하십시오.
참고 URL : https://stackoverflow.com/questions/9811670/how-to-show-all-privileges-from-a-user-in-oracle
'IT' 카테고리의 다른 글
Xcode / Mac OS에서 관리자가 아닌 개발자에게 권한 부여 (0) | 2020.08.10 |
---|---|
MySQL에서 이름 설정 utf8? (0) | 2020.08.10 |
PyQt 애플리케이션에서 스레딩 : Qt 프로그램 또는 Python 사용을 사용합니까? (0) | 2020.08.10 |
IIS 구조에서 aspnet_client 폴더는 무엇입니까? (0) | 2020.08.10 |
.bss 세그먼트가 필요한 이유는 무엇입니까? (0) | 2020.08.10 |