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
계정에 부여된 SELECT
와 INSERT
권한만 회수합니다.
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. 마무리
개발을 하다보면 다양한 테이블이 있고 계정별로 접근 가능한 테이블을 조절해야할 경우가 생깁니다.
이런 경우
GRANT
와 REVOKE
를 사용하여 적절한 접근 설정을 할 수 있습니다!이를 통해 데이터 베이스 보안을 강화하고, 사용자별로 접근 권한 관리가 가능해집니다.
Share article