with grant option & with admin option 차이
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' 카테고리의 다른 글
Linux 기반의 Oracle10g 설치 (0) | 2016.11.30 |
---|---|
Backup & Recovery (0) | 2016.11.30 |
데이터베이스]SEQUENCE(시퀀스)란 무엇인가? (0) | 2016.11.30 |
view에 사용되는 with check option (0) | 2016.11.30 |
오라클 함수 정리 (0) | 2016.11.30 |