MySQL에서 데이터 제어 언어(DCL : Data Control Language)에 대해 학습한 내용을 정리해보았습니다.
MySQL에 접속할 수 있는 유저를 확인하기 위해서는 데이터베이스 중 'mysql'에 접근하여 확인해볼 수 있습니다.
'mysql' 데이터베이스에 있는 테이블 중 'user' 테이블에 host와 user 컬럼을 불러오면 유저의 목록을 조회할 수 있습니다.
# 현재 PC에서 접속이 가능한 유저 생성 (ex. 패스워드 1234)
CREATE USER 'test_1'@'localhost' identified by '1234';
# 외부에서 접속이 가능한 유저 생성 (ex. 패스워드 1234)
CREATE USER 'test_2'@'%' identified by '1234';
새로운 유저를 생성하고 싶다면 로컬에서 접근을 할 것 인지, 외부에서 접근할 것인지 확인을 한 후 위의 명령문을 작성하여 생성할 수 있습니다. 생성 후 SELECT
으로 유저 생성이 성공적으로 완료되었는지 확인해보았습니다.
# 현재 PC에서 접속이 가능한 유저 삭제
DROP USER 'test_1'@'localhost';
# 외부에서 접속이 가능한 유저 삭제
DROP USER 'test_2'@'%';
DROP USER
명령어를 통해 위에서 만들어두었던 유저를 삭제할 수 있습니다. 삭제 후 SELECT
을 사용하여 삭제가 완료되었는지 확인해보았습니다.
# 유저에게 부여된 권한 조회
SHOW GRANTS FOR 'username'@'localhost';
SHOW GRANTS FOR 'username'@'%';
# 권한 부여
GRANT ALL ON dbname.* to 'username'@'localhost';
GRANT ALL ON dbname.* to 'username'@'%';
유저에게 특정 데이터베이스에 대한 모든 권한을 부여할 수 있습니다. 이전에 프로젝트를 위해 만들어두었던 acquisition
데이터베이스에 대한 권한을 test_1
유저에게 부여해보았습니다.
마찬가지로 cosmetics
데이터베이스에 대한 권한을 test_2
유저에게 부여해보았습니다. 이와 같은 방식으로 유저에게 권한을 부여할 수 있습니다.
# 유저에게 부여된 권한 조회
SHOW GRANTS FOR 'username'@'localhost';
SHOW GRANTS FOR 'username'@'%';
# 권한 해제
REVOKE ALL ON dbname.* from 'username'@'localhost';
REVOKE ALL ON dbname.* from 'username'@'%';
REVOKE ALL
을 통해 위에서 부여했던 권한들을 모두 해제 했습니다. 해제 후 SHOW GRANT
명령어를 사용하면 권한이 제대로 해제가 되었는지 확인해볼 수 있습니다.
게시글에 작성된 SQL 관련 문법들은 github에 정리해두었습니다. 학습을 진행하며 업데이트를 진행할 예정입니다.