REVOKE
REVOKE#
구문#
revoke ::=#
revoke_system_privilege ::=#
revoke_object_privilege ::=#
전제 조건#
SYS 사용자와 원래 그 권한을 부여한 사용자만이 해당 권한을 해제할 수 있다.
설명#
REVOKE 구문은 명시된 사용자가 가진 시스템 권한 또는 특정 객체에 대한 객체 권한 또는 롤을 해제한다. 또는 롤에 부여된 시스템 권한 또는 객체 권한을 해제한다.
시스템 및 객체 접근 권한, 롤을 해제하려면 GRANT 명령으로 직접 부여되었던 권한들에 대해서만 해제할 수 있다.
revoke_system_privilege#
시스템 접근 권한을 해제한다.
role#
해제할 롤을 명시한다.
system_privilege#
해제할 시스템 권한을 명시하는 절이다. 시스템 권한의 목록은 GRANT구문의 설명을 참고한다.
ALL PRIVILEGES#
이 REVOKE 문을 실행하는 사용자에 의해서 부여된 모든 시스템 권한을 해제하는 옵션이다.
ALL PRIVILEGES 옵션으로 부여된 시스템 권한은 ALL PRIVILEGES 옵션을 사용해서 해제하거나 각각의 권한을 따로따로 해제해도 된다.
FROM user#
시스템 권한을 해제할 사용자를 명시한다.
FROM role#
어느 롤에서 시스템 권한을 해제할지 명시한다.
FROM PUBLIC#
모든 사용자로부터 시스템 권한을 해제하는 옵션이다.
Note: PUBLIC옵션으로 부여된 시스템 권한은 PUBLIC옵션으로 해제할 수 있다.
revoke_object_privilege#
객체 권한을 해제한다.
role#
해제할 롤을 명시한다.
object_privilege#
해제할 객체 권한을 명시하는 절이다. 객체 권한의 목록은 GRANT구문의 설명을 참고한다.
ALL PRIVILEGES#
이 REVOKE 문을 실행하는 사용자에 의해서 부여된 모든 객체 권한을 해제하는 옵션이다.
ALL PRIVILEGES 옵션으로 권한을 해제하면, 사용자에게 부여된 모든 객체 권한이 해제된다. 즉, ALL PRIVILEGES 옵션을 사용하지 않고 부여된 객체 권한도 해제된다. 예을 들어, 다음 구문으로 부여된 객체 권한은:
GRANT SELECT ON object TO user;
다음 방법으로 명시적으로 해제될 수 있다:
REVOKE SELECT ON object FROM user;
또한, 다음 구문을 사용하면 모든 다른 권한도 함께 해제된다:
REVOKE ALL ON object FROM user;
ON object#
어느 객체(테이블, 시퀀스, 저장 프로시저 등)에 대한 권한을 해제할지를 명시하는 절이다.
ON DIRECTORY directory_name#
어느 디렉토리 객체에 대한 객체 권한을 해제할지를 명시하는 절이다.
FROM user#
객체 권한을 해제할 사용자를 명시하는 절이다.
FROM role#
어느 롤에서 객체 권한을 해제할지 명시한다.
FROM PUBLIC#
모든 사용자로부터 객체 권한을 해제하는 옵션이다.
CASCADE CONSTRAINTS#
REFERENCES 권한 또는 ALL PRIVILEGS 옵션을 사용해서 해제할 때 사용할 수 있는 옵션이다. 이 옵션을 사용해서 사용자의 권한을 해제하면 관련된 모든 참조 무결성 제약조건(referential integrity constraints)도 함께 삭제된다.
예제 1: 객체 권한 해제#
<질의> 객체 권한을 해제하라.
iSQL> CONNECT uare6/rose6;
Connect success.
iSQL> REVOKE SELECT, DELETE ON sys.employees
FROM uare7, uare8;
Revoke success.
iSQL> CONNECT uare7/rose7;
Connect success.
iSQL> SELECT eno, e_lastname FROM sys.employees WHERE eno = 15;
[ERR-311B1: The user must have the SELECT_ANY_TABLE privilege(s) to execute this statement.]
employees 테이블에 대한 SELECT와 DELETE 권한 해제 후, 그 테이블에 SELECT 문을 실행하면 오류 메시지를 볼 수 있다.
예제 2: 롤에서 시스템 권한 해제#
<질의 2> 롤에 부여된 create user, drop user의 시스템 권한 중에서 create user 권한을 해제한다.
iSQL> create role alti_role;
Create success.
iSQL> grant create user, drop user to alti_role;
Grant success.
iSQL> create user user01 identified by user01;
Create success.
iSQL> grant alti_role to user01;
Grant success.
iSQL> connect user01/user01
Connect success.
iSQL> create user user02 identified by user02;
Create success.
iSQL> drop user user02;
Drop success.
iSQL> connect sys/manager
Connect success.
iSQL> revoke create user from alti_role;
Revoke success.
iSQL> connect user01/user01
Connect success.
iSQL> create user user02 identified by user02;
[ERR-311B1 : The user must have CREATE_USER privilege(s) to execute this statement.]
예제 3: 롤에서 객체 권한 해제#
<질의 3> alti_role 롤에서 사용자 user01의 테이블 t1에 대한 DELETE 객체 권한을 해제한다.
iSQL> create role alti_role;
Create success.
iSQL> create user user01 identified by user01;
Create success.
iSQL> create user user02 identified by user02;
Create success.
iSQL> connect user01/user01
Connect success.
iSQL> create table t1 (i1 integer);
Create success.
iSQL> grant select,insert,update,delete on t1 to alti_role;
Grant success.
iSQL> connect sys/manager
Connect success.
iSQL> grant alti_role to user02;
Grant success.
iSQL> connect user02/user02;
Connect success.
iSQL> insert into user01.t1 values (1);
1 row inserted.
iSQL> insert into user01.t1 values (2);
1 row inserted.
iSQL> select * from user01.t1;
I1
--------------
1
2
2 rows selected.
iSQL> update user01.t1 set i1=3 where i1=1;
1 row updated.
iSQL> select * from user01.t1;
I1
--------------
2
3
2 rows selected.
iSQL> delete from user01.t1 where i1=2;
1 row deleted.
iSQL> select * from user01.t1;
I1
--------------
3
1 row selected.
iSQL> connect user01/user01
Connect success.
iSQL> revoke delete on t1 from alti_role;
Revoke success.
iSQL> connect user02/user02
Connect success.
iSQL> delete from user01.t1 where i1=3;
[ERR-311B1 : The user must have DELETE_ANY_TABLE privilege(s) to execute this statement.]