夜はプリズムのファンタジ

Database/Database 정리

3. DCL(Data Control Language, 데이터 제어어)

Ju Hyun AN 2021. 3. 10. 19:21

 

오늘은 끊어졌던 부분을 완결하는 의미에서 DCL과 함께 짧게 TCL도 짧게 정리해두려고 한다.

 

DCL은 Data Control Language의 약자로, '데이터를 제어하는 SQL 언어'를 말한다.

 

특히, DCL은 트랜잭션(Transaction)을 제어하는데 특화된 몇가지 명령어를 포함하고 있는데, 해당 명령어들만 모아서 TCL(Transaction Control Language) 즉, '트랜잭션을 제어하는 SQL 언어'라고 한다.

 

결국, 세부적으로는 DCL이 TCL을 포함하고 있다고 볼 수 있겠다.


✔  DCL(데이터 제어어)의 종류

 

• GRANT (사용자 권한 부여)

• REVOKE (사용자 권한 회수)

 

 

TCL(트랜잭션 제어어)의 종류

 

• COMMIT (트랜잭션 작업 결과 저장 및 반영)

• ROLLBACK (데이터베이스를 마지막 COMMIT 시점으로 복구)

• SET TRANSACTION (트랜잭션 지정)

• SAVEPOINT (저장 지점을 지정하여, ROLLBACK을 진행할 때 해당 SAVEPOINT 까지만 ROLLBACK을 진행)

 

오늘은 위 내용중, GRANT와 REVOKE를 집중적으로 알아보고자 한다.

 

 

 

⑴ GRANT (사용자 권한 부여)

 

GRANT는 DB에 접근하는 사용자에게 권한을 부여하는 용도로 사용된다.

 

사용자에게 부여될 권한의 범위는, 권한 부여 과정에서 제어 가능하므로, 계획에 맞게 사용하면 될 것이다.

 

(1) GRANT [권한] ON [DB명].[테이블명] TO [사용자_ID]@[호스트]
    GRANT [권한] ON [DB명].* TO [사용자_ID]@[호스트]

		→ 사용자 권한 부여

(2) GRANT [권한] ON [DB명].[테이블명] TO [사용자_ID]@[호스트] IDENTIFIED BY [비밀번호]
    GRANT [권한] ON [DB명].* TO [사용자_ID]@[호스트] IDENTIFIED BY [비밀번호]
                                     
		→ 사용자 생성 및 권한 부여
        
(3) SHOW GRANTS FOR [사용자_ID]@[호스트]

		→ 권한 확인

 

만약, 테이블 별로 권한을 달리 설정하고 싶다면, 위 SQL문에서 [테이블명] 부분에 특정 테이블 명을 입력해주면 된다.

 

반대로, DB 내 모든 테이블에 접근 가능하도록 하고 싶다면, *을 사용하면 된다.

 

GRANT의 핵심인 [권한]은 사용자가 해당 DB에서 사용 가능한 제어 및 정의어에 한계를 두는 것과 같다.

 

 

user01 계정에 SELECT, ALTER 권한을 부여

 

위 예제에서는 사용자에게 SELECT, ALTER의 권한만 부여했기 때문에, 다른 행위는 거부된다. 

 

 

user01은 DROP 권한이 없기 때문에 해당 명령어 사용에 거부되었다.

 

추가적인 권한이 필요하다면, 다시 GRANT 명령어를 통해 필요한 권한만 추가해주면 된다.

 

 

 

⑵ REVOKE (사용자 권한 회수)

 

REVOKE는 기존 사용자에게 주어진 권한을 회수(철회)하는 용도로 사용된다.

 

즉, 사용자가 DB 내에서 수행할 수 있는 행위다시 제한을 건다고도 볼 수 있다.

 

[권한] 부분에는, 해당 사용자가 보유하고 있는 권한 중 회수하고 싶은 권한을 입력해주면 된다.

 

REVOKE [권한] ON [DB명].[테이블명] FROM [사용자_ID]@[호스트];
REVOKE [권한] ON [DB명].* FROM [사용자_ID]@[호스트];

		→ 사용자 권한 회수

 

당연하겠지만, 회수할 수 있는 권한은 사용자에게 이미 부여되어있는 권한만 가능하다.

 

위 예제를 활용하여, 이번에는 예제 속의 사용자로부터, ALTER에 대한 권한을 회수해보도록 하겠다.

 

 

ALTER 권한 회수 후, 아무런 권한도 없는 상태가 되었음을 확인할 수 있다. (초기에 ALTER 권한만 있던 상태)

 

위와 같이, 유저 별로 권한에 대한 설정을 해줄 수 있으므로, 이 또한 프로젝트 상에서의 계획에 따라 적절히 사용하면 될 것 같다.

 

 

오늘은 DCL(데이터 제어어)에서도 권한 부여 및 회수와 관련된, GRANT & REVOKE 명령어에 대해 알아보았다.

 

권한에 대한 부여와 회수는 프로젝트 진행 시, 유지 보수 및 무결성 측면에서 중요한 역할을 하기 때문에, 자세히 알아둘 필요가 있을 것 같다.

 

 


 

 

이 블로그는 개인이 혼자 공부해가며 내용을 정리하는 용도로 활용되고 있습니다.

잘못된 지식이나 이론을 게시하지 않도록 주의하고 있습니다.