본문 바로가기
카테고리 없음

[oracle] 권한부여옵션 WITH GRANT OPTION - 이해하기 쉽게

by 플랜비BB 2024. 8. 8.
GRANT 문을 사용하여 사용자에게 권한을 부여할 수 있으며, WITH GRANT OPTION을 사용하면 그 권한을 다른 사용자에게 다시 부여할 수 있는 권한을 추가로 부여할 수 있다.
즉, 사용자A가  사용자B에게 권한부여 / 사용자B 역시 사용자C에게 권한을 줄 수 있게 된다.

 

예제쿼리.txt
0.00MB

 

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 역시도 조회가 불가능하다.