강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

시스템 권한 & 객체 권한의 grant/revoke

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

시스템 권한 & 객체 권한의 grant/revoke


system 사용자가 어떤 하나의 system privilege를 A 에게 with admin option으로 주었다.
A는 grant받은 해당 system privilege를 with admin option없이 B에게도 주었다.
system 사용자가 이 상황에서 A에게 주었던 해당 system privilege를 철회했다.
이상황에서 B는 A에게서 받은 해당 system privilege를 그대로 유지하게 된다.



실습 1과 유사하나, 이번엔 A가 B에게 권한을 줄때 with admin option으로 준다.
system사용자가 A에게서 권한을 revoke한다. B가 A에게서 받은 with admin option은
유호하다. 다시 B가 A에게 자신이 받은 권한을 부여할 수 있다.



이것은 실습 object privilege를 테스트하는 것을 제외하면 실습 1과 동일한 과정이다.
하지만 system privilege와 object privilege는 결과가 다르다.
A라는 사용자가 자신의 테이블에 대한 SELECT권한을 B에게 with grant option으로 주었다
(system privilege는 with admin option, object privilege는 with grant option을 사용한다)
B는 이 권한을 다시 C에게 with grant option없이 부여한다.
A는 B에게 보여한 권한을 revoke한다.
이제 B, C는 모두 권한을 상실하게 된다.
시스템 권한에서 C에게 권한이 유지된 것과는 달리, 객체권한은 cascade하게 모두 철회된다



실습3에서 C에게 with grant option으로 권한을 부여한다.
하지만 결과는 동일하다. A가 B에게 권한을 revoke하면 B, C 모두 권한을 상실하게 된다.



A가 B에게 자신의 테이블에 대해 references, update, select권한을 주었다.
B는 A테이블에 대해 참조하는 테이블을 생성한다.
A는 B에게서 권한을 revoke하려고 하나, 이전처럼 바로 revoke할 수 없다.
cascade constraints옵션과 함께 revoke한다.


system privilege는 select any table, A는 maddog, B는 scott으로 정하고,
테스트한 예이다.


실습 1

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> select * from v$pwfile_users;
select * from v$pwfile_users
              *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다


SQL> connect scott/tiger
연결되었습니다.
SQL> select * from v$pwfile_users;
select * from v$pwfile_users
              *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다


SQL> connect system/xxxxxx
연결되었습니다.
SQL> grant select any table to maddog with admin option;

권한이 부여되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
INTERNAL                       TRUE  TRUE
SYS                            TRUE  TRUE

SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
MADDOG                         SELECT ANY TABLE                         YES
MADDOG                         UNLIMITED TABLESPACE                     NO

SQL> grant select any table to scott;

권한이 부여되었습니다.

SQL> connect scott/tiger
연결되었습니다.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
INTERNAL                       TRUE  TRUE
SYS                            TRUE  TRUE

SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
SCOTT                          SELECT ANY TABLE                         NO
SCOTT                          UNLIMITED TABLESPACE                     NO

SQL> connect system/xxxxxx
연결되었습니다.
SQL> revoke select any table from maddog;

권한이 취소되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> select * from v$pwfile_users;
select * from v$pwfile_users
              *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다


SQL> connect scott/tiger
연결되었습니다.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
INTERNAL                       TRUE  TRUE
SYS                            TRUE  TRUE

SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
SCOTT                          SELECT ANY TABLE                         NO
SCOTT                          UNLIMITED TABLESPACE                     NO

SQL> connect system/xxxxxx
연결되었습니다.

SQL> revoke select any table from scott;

권한이 취소되었습니다.


실습 2

SQL> grant select any table to maddog with admin option;

권한이 부여되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
INTERNAL                       TRUE  TRUE
SYS                            TRUE  TRUE

SQL> grant select any table to scott with admin option;

권한이 부여되었습니다.

SQL> connect system/xxxxxx
연결되었습니다.
SQL> revoke from select any table from maddog;
revoke from select any table from maddog
       *
1행에 오류:
ORA-00990: 권한이 부적합합니다


SQL> revoke select any table from maddog;

권한이 취소되었습니다.

SQL> connect scott/tiger
연결되었습니다.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
INTERNAL                       TRUE  TRUE
SYS                            TRUE  TRUE

SQL> grant select any table to maddog;

권한이 부여되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
INTERNAL                       TRUE  TRUE
SYS                            TRUE  TRUE

SQL> connect system/xxxxxx
연결되었습니다.
SQL> revoke select any table from maddog, scott;

권한이 취소되었습니다.


실습 3

SQL> connect kang/xxxxxx
연결되었습니다.
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
MEMBER                         TABLE
MEMBER_DETAIL                  TABLE

SQL> grant select on member to maddog with grant option;

권한이 부여되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> select * from kang.member;

ID         PASSWORD   NAME        PERSONNUM        SEX
---------- ---------- ---------- ---------- ----------
maddog     rkskekfk   강명규     xxxxxx          1

SQL> grant select on kang.member to scott;

권한이 부여되었습니다.

SQL> connect scott/tiger;
연결되었습니다.
SQL> select * from kang.member;

ID         PASSWORD   NAME        PERSONNUM        SEX
---------- ---------- ---------- ---------- ----------
maddog     rkskekfk   강명규     xxxxxx          1

SQL> connect kang/xxxxxx
연결되었습니다.
SQL> revoke select on member from maddog;

권한이 취소되었습니다.

SQL> connect scott/tiger
연결되었습니다.
SQL> select * from kang.member;
select * from kang.member
                   *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다


실습 4

SQL> connect kang/xxxxxx
연결되었습니다.
SQL> grant select on member to maddog with grant option;

권한이 부여되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> grant select on kang.member to scott with grant option;

권한이 부여되었습니다.

SQL> connect scott/tiger
연결되었습니다.
SQL> select * from kang.member;

ID         PASSWORD   NAME        PERSONNUM        SEX
---------- ---------- ---------- ---------- ----------
maddog     rkskekfk   강명규     xxxxxx          1

SQL> connect kang/xxxxxx
연결되었습니다.
SQL> revoke select on member from maddog;

권한이 취소되었습니다.

SQL> connect scott/tiger
연결되었습니다.
SQL> select * from kang.member;
select * from kang.member
                   *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다


실습 5

SQL> connect kang/xxxxxx
연결되었습니다.
SQL> grant references, update, select on member to maddog;

권한이 부여되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> create table member_detail
  2  (
  3  id varchar2(10),
  4  address varchar2(50),
  5  vocation varchar2(10),
  6  constraint member_detail_fk foreign key(id) references kang.member(id)
  7  );

테이블이 생성되었습니다.

SQL> select owner, constraint_name, constraint_type, table_name, r_owner, r_constraint_name
  2  from user_constraints;

OWNER   CONSTRAINT_NAME   C TABLE_NAME       R_OWNER                        R_CONSTRAINT_NAME
------- ----------------- - ---------------- ------------------------------ ------------------
MADDOG  MEMBER_DETAIL_FK  R MEMBER_DETAIL    KANG                           MEMBER_PK

SQL> select * from kang.member;

ID         PASSWORD   NAME        PERSONNUM        SEX
---------- ---------- ---------- ---------- ----------
maddog     rkskekfk   강명규     xxxxxx          1

SQL> insert into member_detail values('maddog', '노상', 'programmer');

1 개의 행이 만들어졌습니다.

SQL> connect kang/xxxxxx
연결되었습니다.
SQL> revoke references, update, select on member from maddog;
revoke references, update, select on member from maddog
*
1행에 오류:
ORA-01981: 현 권한취소를 수행하려면 CASCADE CONSTRAINTS가 지정되어야 합니다


SQL> revoke references, update, select on member from maddog cascade constraints;

권한이 취소되었습니다.

SQL> connect maddog/xxxxxx
연결되었습니다.
SQL> select * from member_detail;

ID         ADDRESS                                            VOCATION
---------- -------------------------------------------------- ----------
maddog     노상                                               programmer

SQL> select * from user_constraints;

선택된 레코드가 없습니다.

SQL> 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  117 명