[DCL, Data Control Language]

DCL은 데이터베이스 제어 언어입니다. 데이터 베이스의 접근과 객체 사용 권한 부여와 회수를 통해 제어를 합니다.
HootJem's avatar
Aug 27, 2024
[DCL, Data Control Language]
DCL은 데이터베이스 제어 언어입니다. 데이터 베이스의 접근과 객체 사용 권한 부여회수를 통해 제어를 합니다.
  • 권한 부여 : GRANT
  • 권한 회수 : REVOKE
 

기본적으로 처음 SQL 에 들어가게 되면 root 계정으로 접속이 됩니다.
이때 root 계정이 다음과 같이 데이터베이스를 생성한다고 가정해 봅니다.
create database `StudyDB`;
생성한 DB의 경우 다른 계정은 접근이 불가 합니다.(root 계정만 가능) 다른 계정이 접근할 수 있도록 하기 위해서 GRANT 를 통해 권한을 부여하게 됩니다.
 

1. 권한 부여를 위한 계정 생성

먼저, 권한을 부여할 계정을 생성해야 합니다. 새로운 사용자 계정을 생성하려면 CREATE USER 명령어를 사용합니다.
create user 'user1'@'%' Identified by '1234';
user1 는 임의로 지정한 계정 id 이고, % 는 외부 접속자라는 의미입니다. (localhost 도 있음)
 

2. 생성한 계정에 권한 부여

계정을 생성한 후, 특정 데이터베이스에 대한 권한을 부여할 수 있습니다. 아래의 예제는 StudyDB 데이터베이스에 대한 모든 권한을 user1에게 부여하는 것입니다.
grant all privileges on `StudyDB`.* TO 'user1'@'%'; flush privileges;
  • StudyDB.*: StudyDB 데이터베이스의 모든 테이블을 의미합니다.
  • ALL PRIVILEGES: 데이터베이스의 모든 권한을 부여합니다.
  • FLUSH PRIVILEGES: 데이터베이스 서버에 변경된 권한을 적용합니다.
FLUSH PRIVILEGES는 권한 테이블의 변경 사항을 즉시 적용하기 위해 사용됩니다.

2.1 권한 부여 옵션

GRANT 명령어는 다양한 권한 옵션을 제공합니다. 예를 들어, 특정 권한만 부여할 수도 있습니다.
GRANT SELECT, INSERT ON `StudyDB`.* TO 'user1'@'%';
SELECT, INSERT: user1 계정에 StudyDB 데이터베이스에 대한 SELECT(조회) 및 INSERT(삽입) 권한만 부여합니다.
  • 권한 재부여 옵션
GRANT ALL PRIVILEGES ON `StudyDB`.* TO 'user1'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
WITH GRANT OPTION: user1이 부여받은 권한을 다른 사용자(user2 등)에게도 부여할 수 있도록 허용.

3. 권한 회수

부여된 권한을 회수할 때는 REVOKE 명령어를 사용합니다.
REVOKE ALL PRIVILEGES ON `StudyDB`.* FROM 'user1'@'%'; FLUSH PRIVILEGES;
 

3.1 권한 회수 옵션

REVOKE 명령어도 GRANT 명령어 처럼 다양한 옵션을 제공합니다. 특정 권한만 회수할 수도 있습니다.
REVOKE SELECT, INSERT ON `StudyDB`.* FROM 'user1'@'%';
SELECT, INSERT: user1 계정에 부여된 SELECTINSERT 권한만 회수합니다.
  • user1 에게 준 GRANT OPTION 회수
REVOKE GRANT OPTION ON `StudyDB`.* FROM 'user1'@'%'; FLUSH PRIVILEGES;
이때 이미 user1 가 user2 에게 권한을 주었다면 user2 의 권한은 회수되지 않습니다.
 
REVOKE ALL PRIVILEGES ON `StudyDB`.* FROM 'user1'@'%'; FLUSH PRIVILEGES;
REVOKE ALL PRIVILEGES 는 user1 의 모든 권한과 user1 이 부여한 모든 권한도 회수합니다. 따라서 user2 도 더이상 권한을 사용할 수 없습니다.

4. 마무리

개발을 하다보면 다양한 테이블이 있고 계정별로 접근 가능한 테이블을 조절해야할 경우가 생깁니다. 이런 경우 GRANTREVOKE 를 사용하여 적절한 접근 설정을 할 수 있습니다!
이를 통해 데이터 베이스 보안을 강화하고, 사용자별로 접근 권한 관리가 가능해집니다.
Share article

[HootJem] 개발 기록 블로그