2008. 5. 14. 18:19ㆍOracle/Oracle Study
with grant option 과 with admin option에 대해 테스트를 하기 전에
쉽게 이해하실수 있도록 기본적인 셋팅을 하도록 하겠습니다.
C:\> sqlplus "/as sysdba"
1. 사용자 생성(USER_1, USER_2)
SQL> create user user_1 identified by user_1 default tablespace users;
사용자가 생성되었습니다.
SQL> create user user_2 identified by user_2 default tablespace users;
사용자가 생성되었습니다.
2. 접속 권한 및 간단한 권한 주기
SQL> grant create session, create table, create view to user_1;
권한이 부여되었습니다.
SQL> grant create session, create table to user_2;
권한이 부여되었습니다.
이제 with grant option 과 with admin option 을 알아보도록 하겠습니다.
(1) with grant option
기본적으로 scott 계정은 다들 가지고 계시니 scott 계정을 들어가보도록 하겠습니다.
SQL> conn scott/tiger
연결되었습니다.
scott이 user_1에게 emp 테이블을 select 할수 있는 권한을 with grant option을 써서 부여 하도록 합니다.
SQL> grant select on emp to user_1 with grant option;
권한이 부여되었습니다.
SQL> select * from user_tab_privs
2 where table_name='EMP';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- --------------- --------------- --------------- ---- ---
USER_1 SCOTT EMP SCOTT SELECT YES NO
scott에게 받은 권한을 똑같이 user_2에게 부여합니다.
SQL> conn user_1/user_1
연결되었습니다.
SQL> grant select on scott.emp to user_2 with grant option;
권한이 부여되었습니다.
SQL> select * from user_tab_privs
2 where table_name='EMP';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- --------------- --------------- --------------- ---- ---
USER_1 SCOTT EMP SCOTT SELECT YES NO
USER_2 SCOTT EMP USER_1 SELECT YES NO
USER_TAB_PRIVS 테이블은 누구의 소유이며 권한자 및 권한을 부여 받은 자를 확인 할 수 있습니다.
이제 부여한 권한을 다시 회수 할 것입니다. 어떻게 회수가 되는지 확인해 보시길 바랍니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> revoke select on emp from user_1;
권한이 취소되었습니다.
SQL> conn user_1/user_1;
연결되었습니다.
SQL> select * from user_tab_privs
2 where table_name='EMP';
선택된 레코드가 없습니다.
SQL> conn user_2/user_2;
연결되었습니다.
SQL> select * from user_tab_privs
2 where table_name='EMP';
선택된 레코드가 없습니다.
※ scott이 user_1의 권한 revoke 하였지만, user_1이 user_2에게 부여한 권한도 같이 회수가 되는 것을 볼 수 있습니다.
(2) with admin option
SQL> conn /as sysdba
연결되었습니다.
SQL> grant alter session to user_1 with admin option;
권한이 부여되었습니다.
SQL> select * from dba_sys_privs where grantee like 'USER%';
GRANTEE PRIVILEGE ADM
---------- ------------------- ---
USER_1 CREATE VIEW NO
USER_1 CREATE TABLE NO
USER_1 ALTER SESSION YES
USER_1 CREATE SESSION NO
USER_2 CREATE TABLE NO
USER_2 CREATE SESSION NO
6 개의 행이 선택되었습니다.
SQL> conn user_1/user_1
연결되었습니다.
SQL> grant alter session to user_2 with admin option;
권한이 부여되었습니다.
SQL> select * from user_sys_privs where username like 'USER%';
USERNAME PRIVILEGE ADM
----------------------- ------------------ ---
USER_1 CREATE VIEW NO
USER_1 CREATE TABLE NO
USER_1 ALTER SESSION YES
USER_1 CREATE SESSION NO
SQL> conn user_2/user_2
연결되었습니다.
SQL> select * from user_sys_privs where username like 'USER%';
USERNAME PRIVILEGE ADM
----------------------- ------------------ ---
USER_2 CREATE TABLE NO
USER_2 ALTER SESSION YES
USER_2 CREATE SESSION NO
SQL>
위 테이블을 보시면 ADM 컬럼에 YES로 나와있는 것을 볼수 있습니다.
이제 GRANT 권한을 회수한 것처럼 똑같이 해보겠습니다.
SQL> conn /as sysdba
SQL> revoke alter session from user_1;
권한이 취소되었습니다.
SQL> select * from dba_sys_privs where grantee like 'USER%';
GRANTEE PRIVILEGE ADM
---------- --------------- ---
USER_1 CREATE VIEW NO
USER_1 CREATE TABLE NO
USER_1 CREATE SESSION NO
USER_2 CREATE TABLE NO
USER_2 ALTER SESSION YES
USER_2 CREATE SESSION NO
※ dba_sys_privs를 보시면 user_2의 권한은 그대로 남아있고 user_1의 권한 회수 된것을 볼수 있습니다.
결론을 내리자면 with grant option 은 revoke 시 다른사용자에게도 부여한 권한을 같이 회수하지만 with admin option은 특정 사용자의 권한만 회수가 되고 나머지 다른사용자에게 부여된 권한은 회수가 되지 않습니다.
사용된 테이블 : user_tab_privs
: dba_sys_privs
: user_sys_privs
내용은 길지만 차근차근 따라하신다면 그렇게 긴 내용은 아닙니다.
업무 중에 할려니 힘드네요..ㅋㅋㅋ
감사합니다.
'Oracle > Oracle Study' 카테고리의 다른 글
Row Migration (0) | 2008.11.30 |
---|---|
10g Archive Mode로 변경 (0) | 2008.10.01 |
Rollup & Cube & Grouping 차이 (0) | 2008.05.16 |
view에 사용되는 with check option (0) | 2006.10.20 |
오라클 아스키로 특수문자 업데이트 (0) | 2006.10.16 |