Computer_Language/DataBase_Python

[DB][MySQL] 데이터베이스의 DCL(Data Control Language)

Joo-Topia 2019. 10. 18. 15:57

이번 포스트는 MySQL을 사용하여 데이터베이스의 DCL을 정리해보려고 한다.

DCL이란 데이터베이스를 제어하는 명령어로 사용자 정보를 추가, 수정, 삭제 등을 하거나 권한을 설정할 때 사용한다.

 

사용자 정보 변경


기본 문법
1. 유저 생성
mysql> CREATE USER 'userid'@localhost IDENTITFIED BY '비밀번호';
mysql> CREATE USER 'userid'@'%' IDENTITFIED BY '비밀번호';

2. 유저 비밀번호 변경
mysql> SET PASSWORD FOR 'userid'@'%' = '비밀번호';

3. 유저 삭제
mysql> DROP USER 'userid'@'%';

로컬에서만 접속할 수 있는 "localman"이라는 유저를 생성했다.

 

비밀번호도 변경할 수 있지만, 여기에 변경된 결과를 올릴 방법이 없다..

 

유저를 삭제하고 테이블에서 "localman"이 삭제된 것을 확인할 수 있다.

 

권한 설정


기본 문법
1. 로컬에서만 특정 데이터베이스의 테이블 접속 허용
mysql> GRANT ALL ON 데이터베이스 이름.TABLE to 'USER_ID'@localhost;

2. 특정 호스트에서만 특정 데이터베이스의 테이블 접속 허용
mysql> GRANT ALL ON 데이터베이스 이름.TABLE to 'USER_ID'@localhost;

3. 모든 호스트에서 특정 데이터베이스의 테이블 접속 허용
mysql> GRANT ALL ON 데이터베이스 이름.TABLE to 'USER_ID'@localhost;

4. 모든 권한이 아닌 일부 권한만 허용
mysql> GRANT SELECT ON 데이터베이스 이름.TABLE to 'USER_ID'@localhost;
* SELECT대신에 다른 CRUD권한을 입력 가능하다.
* CREATE문으로 유저 정보를 이미 만들어 두어야 한다.

문법대로만 한다면 DCL이 잘 적용되는 것을 볼 수 있다.

 

 

 flush privileges


기본 문법
flush privileges;

user, db 같은 grant table을 INSERT, UPDATE 등을 써서 직접 데이터 입력/수정을 할 경우, grant tables를 다시 읽어야 권한 설정이 적용되기 때문에 이 문법을 사용한다. 하디만 GRANT명령으로 수정 시 해당 명령을 생략해도 무방하다.