Cracking Code

SQL - GRANT, REVOKE 본문

Database

SQL - GRANT, REVOKE

CrackCo 2020. 7. 23. 19:12
데이터베이스에 사용자를 생성하면 해당 사용자는 모든 권한이 없습니다.
권한을 부여하는 방법에 대해서 알아봅시다.

 

DBA는 데이터베이스와 객체에 접근할 수 있는 권한을 부여할 수 있습니다.

또한 일반 사용자도 다른 사용자 또는 ROLE 에게 권한을 부여할 수 있는 권한을 부여 받을 수 있습니다.

 

권한의 종류는 시스템과 객체가 있습니다.

 

시스템 권한

GRANT privilege[, privilege]
TO user[, user | role | PUBLIC ...]

유저에 대한 CREATE, DROP, 모든 테이블의 DROP, BACKUP, SELECT, CREAT 등이 있으며

보통 일반 사용자에게는 부여하지 않는 권한입니다.

 

일반 사용자에게 부여가능한 시스템 권한은

CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW, CREATE PROCEDURE이 있습니다.

특히, CREATE SESSION 권한이 있어야 데이터베이스에 접속할 수 있으므로

필수적으로 일반 사용자에게 부여해주어야 합니다.

 

저번에 만들었던 USER01에게 데이터베이스에 접근하고 테이블을 만들 수 있는 권한을 부여해봅시다.

GRANT CREATE SESSION, CREATE TABLE
TO USER01;

부여를 성공했다는 메시지와 함께 이제 USER01 로 접속할 수 있습니다.

만약, 권한을 회수하고 싶으면 REVOKE 명령문을 사용하면 됩니다.

REVOKE CREATE SESSION
FROM USER01;

USER01로 접근을 시도하면

CREATE SESSION 권한이 회수되어 USER01 유저로 접근이 안 되는 오류를 확인할 수 있습니다.

 

객체 권한

객체의 내용을 조작하기 위한 권한으로 테이블을 조작하는 권한입니다.

사용자는 자신의 스키마에 저장된 모든 객체에 대한 권한을 갖고 있으며

권한을 다른 사용자에게 부여할 수도 있습니다.

GRANT object_priv [(columns)]
ON object
TO {user | role | PUBLIC}
[WITH GRANT OPTION];

-- WITH GRANT OPTION: 권한을 부여 받은 사람이 다른 사용자에게 다시 부여할 수 있는 옵션

object에 관한 권한을 user나 role 또는 모든 사용자에게 부여합니다.

 

SCOTT 계정으로 접속하여 USER01에게 DEPT 테이블의 DNAME을 UPDATE 권한을 부여해봅시다.

GRANT UPDATE(DNAME)
ON DEPT
TO USER01;

GRANT를 성공했으니 USER01 계정으로 UPDATE를 수행해봅시다.

UPDATE SCOTT.DEPT
SET DNAME = 'WOOJO'
WHERE DEPTNO = 90;

COMMIT;

UPDATE가 성공적으로 이루어진 것을 확인할 수 있습니다.

 

만약 권한을 다시 회수하고 싶다면 아까와 같이 REVOKE 문을 수행하면 됩니다.

SCOTT 계정으로 USER01의 UPDATE 권한을 다시 회수해봅시다.

REVOKE UPDATE
ON DEPT
FROM USER01;

UPDATE 권한을 회수당해 접근할 수 없게 됩니다.

'Database' 카테고리의 다른 글

SQL - ROLE (롤)  (0) 2020.07.23
SQL - CREATE, ALTER, DROP USER  (0) 2020.07.23
SQL - INDEX  (0) 2020.07.23
SQL - SEQUENCE (시퀀스)  (0) 2020.07.22
SQL - VIEW (뷰)  (0) 2020.07.22
Comments