'유저권한'에 해당되는 글 1건

  1. 2019.08.29 권한 확인 SQL
생계/Oracle2019. 8. 29. 16:34

토드를 사용하면 object 의 DDL 정보를 쉽게 확인 할 수 있다. 

그래서 계정의 경우 부여받은 role, 권한 까지  모두 확인할수 있다.

그러나 orange 에서는 그게 안되서 각 권한에 해당하는 sql 을 작성해서 확인해야한다. 

뭐.. 항상 토드를 쓰는 환경으로 갈수는 없는 일이니까  이번 기회에 정리를 하자.

 

## Role 이 포함한 권한 확인

- select * from dba_tab_privs where grantee='ROLE 이름';

 

## 유저에게 부여된 권한 확인

- select * from dba_role_privs where grantee='USER이름';

- select * from dba_sys_privs where grantee='USER이름';  ( create view 등) 

 

## DB object 에 대한 권한을 누가 가지고 있나  ( role 은 제외되고 grantee 만 되나보다)

  select * from dba_tab_privs where table_name= 'PLSQL/TABLE';

 

## A 의 object권한을 B 에 동일하게 주기

 

select 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO 받는사람(B);'

from dba_tab_privs where grantee=주는사람(A);

 

## userB 에게 없는 userA 의 object 권한을 주기 (A 의 권한이랑 똑같이 B 에게 주기)

권한은 중복으로 줘도 상관이 없지만 중복없이 주는 쿼리는 outer join 이나 차집합으로 구할수 있다.

SELECT 'GRANT '||A.PRIVILEGE||' ON '||A.OWNER||'.'||A.TABLE_NAME||' TO userB;' STMT
  FROM (
        select '유저A 이름
' AS NM, GRANTEE,OWNER,TABLE_NAME,GRANTOR,PRIVILEGE,TYPE
          from dba_tab_privs
         where GRANTEE ='userA'
       )A,
       (
        select '유저B 이름
' AS NM, GRANTEE,OWNER,TABLE_NAME,GRANTOR,PRIVILEGE,TYPE
          from dba_tab_privs
         where GRANTEE ='userB'
       )B
 WHERE A.OWNER = B.OWNER(+) 
   AND A.TABLE_NAME = B.TABLE_NAME(+)
   AND A.GRANTOR = B.GRANTOR(+)
   AND A.PRIVILEGE = B.PRIVILEGE(+)
   AND B.NM IS NULL
ORDER BY A.OWNER, A.TABLE_NAME, A.PRIVILEGE, A.TYPE

 

반응형
Posted by 돌고래트레이너