데이터베이스 분류
시스템 권한 & 객체 권한의 grant/revoke
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 7,594 조회
- 0 추천
- 목록
본문
시스템 권한 & 객체 권한의 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>
"무단배포금지: 클라우드포털(www.linux.co.kr)의 모든 강좌는 저작권에 의해 보호되는 콘텐츠입니다. 무단으로 복제하여 배포하는 행위는 금지되어 있습니다."
관련자료
-
이전
-
다음
댓글 0
등록된 댓글이 없습니다.