oracle-특정 테이블에 액세스 할 수있는 사용자 목록


28

나는 이것이 이전에 요청되었다고 확신하지만 다음에 대한 관련 세부 정보를 찾을 수없는 것 같습니다.

다음을 수행 할 수있는 일종의 사전 빌드 테이블이 있습니까 (dba_tab_privs를 사용했지만 제한적이며 모든 요구 사항을 충족하지 못합니다).

  1. 특정 역할이 할당 된 모든 사용자를 나열 하시겠습니까?
  2. 사용자에게 주어진 모든 역할을 나열 하시겠습니까?
  3. 사용자에게 부여 된 모든 권한을 나열 하시겠습니까?
  4. 특정 역할이 어떤 테이블에 SELECT 액세스 권한을 부여합니까?
  5. 사용자가 선택할 수있는 모든 테이블을 나열 하시겠습니까?
  6. 특정 테이블에서 선택할 수있는 모든 사용자를 나열하십시오 (관련 역할을 부여 받거나 직접 부여를 통해 (예 : joe에게 부여 할 수있는 부여 선택))? 이 쿼리의 결과는 또한 사용자가이 액세스 권한을 가진 역할 또는 직접 부여 여부를 보여 주어야합니다.

답변:


33

특정 역할이 할당 된 모든 사용자 나열

-- Change 'DBA' to the required role
select * from dba_role_privs where granted_role = 'DBA'

사용자에게 주어진 모든 역할을 나열

-- Change 'PHIL@ to the required user
select * from dba_role_privs where grantee = 'PHIL';

사용자에게 부여 된 모든 권한을 나열합니다

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

참고 : http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html 에서 가져옴

특정 역할이 어떤 테이블에 SELECT 액세스 권한을 부여합니까?

-- Change 'DBA' to the required role.
select * from role_tab_privs where role='DBA' and privilege = 'SELECT';

사용자가 선택할 수있는 모든 테이블을 나열 하시겠습니까?

--Change 'PHIL' to the required user
select * from dba_tab_privs where GRANTEE ='PHIL' and privilege = 'SELECT';

특정 테이블에서 선택할 수있는 모든 사용자를 나열하십시오 (관련 역할을 부여 받거나 직접 부여를 통해 (예 : joe에게 부여 할 수있는 부여 선택))? 이 쿼리의 결과는 또한 사용자가이 액세스 권한을 가진 역할 또는 직접 부여 여부를 보여 주어야합니다.

-- Change 'TABLENAME' below
select Grantee,'Granted Through Role' as Grant_Type, role, table_name
from role_tab_privs rtp, dba_role_privs drp
where rtp.role = drp.granted_role
and table_name = 'TABLENAME' 
union
select Grantee,'Direct Grant' as Grant_type, null as role, table_name
from dba_tab_privs
where table_name = 'TABLENAME' ;

이것은 좋은 시작이지만 # 3은 객체 권한을 포함하지 않으며, # 5는 SELECT역할로 인해 사용 가능한 권한을 포함하지 않으며 # 6이 누락되었습니다.
레이 리펠

Ops, CONNECT BY .. # 6 이전
Philᵀᴹ

# 5에 대한 답변에 사용자가 할당 된 역할을 통해 선택할 수있는 테이블이 포함되어 있습니까?
dgf

사용자에게 다른 역할이 부여 된 역할에서 권한을 얻는 경우이 기능이 작동합니까?
jpmc26

2

사용하려는 정보를 얻는 방법에는 여러 가지가 있습니다.

데이터 사전보기

오라클에 존재합니다.

뷰를 쿼리하고 세부 정보를 검색 할 수 있습니다. 예를 들면 다음과 같습니다.

DBA_COL_PRIVS에서 *를 선택하십시오.

ALL_COL_PRIVS에서 *를 선택하십시오.

USER_COL_PRIVS에서 *를 선택하십시오.

이것은 당신에게 알려줍니다 :

DBA보기는 데이터베이스의 모든 열 오브젝트 권한을 설명합니다. ALL보기는 현재 사용자 또는 PUBLIC이 오브젝트 소유자, 권한 부 여자 또는 권한 부여자인 모든 컬럼 오브젝트 권한을 설명합니다. USER보기는 현재 사용자가 오브젝트 소유자, 권한 부 여자 또는 권한 부여자인 컬럼 오브젝트 권한을 설명합니다.

더 많은 정보를 원하시면, 이것을 확인하십시오

이것이 도움이되기를 바랍니다.


1
이것은 질문에 대답하지 않는 것 같습니다 : DBA가 특정 임의의 사용자가 액세스 할 수있는 것을 어떻게 알 수 있습니까?
모든 거래의 존
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.