Data Base_Oracle/SQL

SQL_WITH GRANT OPTION 객체 권한 위임

pathas 2020. 1. 13. 17:34

WITH GRANT OPTION_객체 권한 위임

§ 형식

[ SQL> grant 권한종류,,, on 테이블명 / 뷰명, / 객체명,,, to 계정명,,, with grant option; ]

 

※ 다른 계정에서 부여받은 권한을 또 다른 계정에 부여할 수 있게 됨

# 예제 _ 시나리오

관리자 계정에서 test4/test4, test5/test5 계정 생성
[ SQL> create user test4 identified by test4;
사용자가 생성되었습니다.

SQL> create user test5 identified by test5;
사용자가 생성되었습니다. ]

 

② test4, test5 계정에 로그인, 테이블 생성 권한 부여
[ SQL> grant connect,resource to test4, test5;
권한이 부여되었습니다. ]

 

scott 계정에서 b_dept2 테이블에 대한 select, insert, update 권한을
with grant option과 함께 test4에 부여
[ SQL> grant select, insert, update on b_dept2 to test4 wi
th grant option;
권한이 부여되었습니다.
]

 

scott 계정에서 b_dept2 테이블에 대한 select, update 권한을 test5에 부여
[ SQL> grant select, update on b_dept2 to test5;
권한이 부여되었습니다.
]

 

test4 계정에서 b_dept2테이블에 대한 insert 권한을 test5에 부여
[ SQL> grant insert on
scott.b_dept2 to test5;
권한이 부여되었습니다.
]

 

※ b_dept2는 scott의 테이블이기 때문에 소유자명.테이블명으로 작성해야 함 !!

 

※ create synonym 권한이 없기 때문에 동의어 생성 불가

 

test5 계정에서 scott.b_debt2 테이블에 (60, 'IMSI', 'BUCHEON') 레코드 입력
[ SQL> insert into scott.b_dept2 values(60, 'IMSI', 'BUCHEON');
1 개의 행이 만들어졌습니다.

select * from b_dept2; ]

DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
... ... ...
60 IMSI BUCHEON

test5계정에서 scott.b_dept2테이블의 DEPTNO가 60인 레코드의 LOC을 'DALLAS'로 변경
[ SQL> update scott.b_dept2 set loc='DALLAS' where deptno=60;
1 행이 갱신되었습니다. ]

DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
... ... ...
60 IMSI BUCHEON

※ scott에게 부여받은 update, select와 test4에게 부여받은 insert 모두 가능


WITH GRANT OPTION 회수

§ 형식

[ SQL> revoke 권한명,,, on 객체명,,, from 계정명,,,; ]

 

※ A 계정에서 B에게 with grant option으로 부여했던 권한을 회수하면
B가 A에게 위임받아 C에게 부여했던 권한도 같이 회수됨

# 예제 _ 시나리오

scott계정에서 b_dept2테이블에 대해 test4에 부여했던 권한 회수
[ SQL> revoke insert, update, select on b_dept2 from test4;
권한이 취소되었습니다.
]

 

※ scott 계정이기 때문에 b_dept2만 작성

 

test5 계정에서 scott.b_dept2테이블에 (70, 'TEST', 'JEJU') 레코드 입력
[ SQL> insert into scott.b_dept2 values(70, 'TEST', 'JEJU');
1행에 오류:
ORA-01031: 권한이 불충분합니다
]

 

※ scott계정이 test4에 부여한 권한을 회수하면 test4가 test5에 부여한 권한도 같이 회수됨


객체 권한을 위임할 때 사용하는 with grant option에 대해 알아보았습니다.

특정 계정으로부터 with grant option과 함께 부여받은 객체 권한을 다른 계정에도 부여할 수 있게됩니다.

계정 내의 객체를 다른 계정과 공유해서 작업해야 하는 경우에 유용하게 사용할 수 있을 것입니다.