DCL(Data Control Language)
✒️ 2025-05-28 17:19 내용 수정
DCL(Data Control Language)
데이터를 제어하기 위한 언어
- 참고 자료 : Ju Hyun AN's DCL(Data Control Language, 데이터 제어어), Marko Calasan's What Are DDL, DML, DQL, and DCI in SQL
- 데이터베이스에 접근하는 사용자들의 권한을 설정할 때 사용한다.
- 분류상 TCL에 포함되기도 한다.
- 각 키워드의 전체 구문은 복잡하고 세부적인 옵션이 많아 참고 자료 페이지를 참고하는 것이 좋다.
1. GRANT
- 데이터베이스 사용자에게 권한을 부여할 때 사용한다.
- 웹서버 설치#3. MariaDB 설치 8번 과정 참고.
-- 권한 부여
GRANT 권한 ON 데이터베이스명.객체명 TO 사용자ID@호스트;
GRANT 권한 ON 객체명 TO 사용자;
FLUSH PRIVILEGES; -- 권한 적용
-- 권한 확인
SHOW GRANT FOR 사용자@호스트명;
- 몇 가지 예시
- 참고 자료 : SNOWPLE MySQL/MySQL Grant 권한주기
-- 특정 사용자에게 데이터베이스의 모든 객체에 모든 권한 부여
GRANT ALL PRIVILEGES ON DB명.* TO 사용자ID@호스트명;
-- 모든 사용자에게 데이터베이스의 모든 객체에 모든 권한 부여
GRANT ALL PRIVILEGES ON DB명.* TO 사용자ID@'%'; -- % 는 ANY의 표현
-- 특정 사용자에게 특정 테이블에 대한 SELECT 권한만 부여
GRANT SELECT ON DB명.테이블명 TO 사용자ID@호스트명;
-- 특정 사용자에게 특정 테이블에 대한 SELECT, INSERT 권한만 부여
GRANT SELECT, INSERT ON DB명.테이블명 TO 사용자ID@호스트명;
-- 사용자를 생성하고 모든 권한을 부여
GRANT ALL PRIVILEGES ON DB명.* TO 사용자ID@호스트명 IDENTIFIED BY 비밀번호;
2. DENY
- 데이터베이스 사용자(보안 주체)의 사용 권한을 거부할 때 사용한다.
- DENY는 개체 소유자 또는 sysadmin 고정 서버 역할의 멤버에 적용되지 않는 경우를 제외하고 모든 사용 권한보다 먼저 적용된다.
- DENY된 상태로는 나중에 사용 권한을 부여 받을 수 없다.
- DENY를 사용하면 사용자(보안 주체)가 GRANT를 통해 특정 사용 권한을 얻지 못하도록 막을 수 있다.
- 참고 자료 : MS DENY(Transact-SQL), databricks DENY
DENY 권한 ON 데이터베이스명.객체명 TO 사용자ID@호스트;
DENY 권한 ON 객체명 TO 사용자;
- 몇 가지 예시
-- 모든 사용자에게 데이터베이스의 모든 객체에 모든 권한을 거부
DENY ALL PRIVILEGES ON DB명.* TO 사용자ID@'%'; -- % 는 ANY의 표현
-- 특정 사용자에게 특정 테이블에 대한 SELECT 권한을 거부
DENY SELECT ON DB명.테이블명 TO 사용자ID@호스트명;
-- 특정 사용자에게 데이터베이스의 모든 객체에 대한 SELECT, INSERT 권한을 거부
DENY SELECT, INSERT ON DB명.* TO 사용자ID@호스트명;
3. REVOKE
- 데이터베이스 사용자의 권한을 되돌릴 때 사용한다.
- GRANT로 부여했던 사용 권한을 제거하거나, DENY로 거부했던 사용 권한을 되돌린다.
- 참고 자료 : MS REVOKE(Transact-SQL)
REVOKE 권한 ON 데이터베이스명.객체명 [TO|FROM] 사용자ID@호스트;
REVOKE 권한 ON 객체명 [TO|FROM] 사용자;
- 몇 가지 예시
-- 특정 사용자에게 특정 테이블에 대한 SELECT 권한을 되돌림
REVOKE SELECT ON DB명.테이블명 TO 사용자ID@호스트명;
-- 특정 사용자에게 데이터베이스의 모든 객체에 대한 SELECT, INSERT 권한을 되돌림
REVOKE SELECT, INSERT ON DB명.* TO 사용자ID@호스트명;