토드를 사용하면 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
'생계 > Oracle' 카테고리의 다른 글
DB를 사용한 채번 방식 알아보자 (0) | 2020.04.30 |
---|---|
오라클 로그인 특수문자 입력 (0) | 2020.01.30 |
오라클 like 검색에서 특수문자 사용하기 (0) | 2019.06.04 |
tnsnames.ora 를 통한 DB 접속 테스트 (0) | 2018.11.05 |
오라클 flashback as of timestamp 테스트 (0) | 2018.10.23 |