GRANT 문을 사용하여 사용자에게 권한을 부여할 수 있으며, WITH GRANT OPTION을 사용하면 그 권한을 다른 사용자에게 다시 부여할 수 있는 권한을 추가로 부여할 수 있다.
즉, 사용자A가 사용자B에게 권한부여 / 사용자B 역시 사용자C에게 권한을 줄 수 있게 된다.
1. 예제 테이블(사용자A의 직원테이블)
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- ------------------------------ ------------------------------
100 John Doe
101 Jane Smith
102 Mike Johnson
2. 사용자A가 사용자B에게 SELECT 권한부여
conn user_a/password
GRANT SELECT ON user_a.employees TO user_b;
3. 사용자B에서 테이블 조회
-- 권한 받기 이전
select * from user_a.employees;
ERROR at line 1:
ORA-00942: table or view does not exist
-- 권한 받은 이후
select * from user_a.employees;
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- ------------------------------ ------------------------------
100 John Doe
101 Jane Smith
102 Mike Johnson
4. 사용자B가 사용자C에게 SELECT 권한부여
-- WITH GRANT OPTION 없을 때
conn user_a/password
GRANT SELECT ON user_a.employees TO user_b;
conn user_b/password
GRANT SELECT ON user_a.employees TO user_c;
ERROR at line 1:
ORA-01031: insufficient privileges
-- WITH GRANT OPTION 있을 때
conn user_a/password
GRANT SELECT ON user_a.employees TO user_b WITH GRANT OPTION;
conn user_b/password
GRANT SELECT ON user_a.employees TO user_c;
Grant succeeded.
5. 사용자C에서 테이블 조회
select * from user_a.employees;
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- ------------------------------ ------------------------------
100 John Doe
101 Jane Smith
102 Mike Johnson
6. 사용자B의 SELECT 권한취소
conn user_a/password
REVOKE SELECT ON user_a.employees FROM user_b;
conn user_b/password
SELECT * FROM user_a.employees;
ERROR at line 1:
ORA-00942: table or view does not exist
conn user_c/password
SELECT * FROM user_a.employees;
ERROR at line 1:
ORA-00942: table or view does not exist
// 사용자B 뿐만 아니라 사용자B가 권한을 부여했던 사용자C 역시도 조회가 불가능하다.