안녕하세요
DBMS 사용 시 특정 사용자에게 권한을 주거나 제거해야 할 경우에 사용하는 명령어에 대해 알아보도록 하겠습니다.
권한 종류
우선 권한의 종류에 대해서 알아보겠습니다.
아래 표에 있는 것 외에도 더 많은 종류가 있지만 자주 쓰는 것에 대해서만 정리를 해봤습니다.
추가적으로 필요한 내용에 대해서는 MySQL 공식 매뉴얼을 참고해주세요 ^^
권한 | 설명 |
ALL |
모든 권한 부여 |
ALTER |
Table 내용 변경 가능 |
ALTER ROUTINE |
Function, Procedure, Trigger 내용 변경 또는 삭제 가능 |
CREATE |
Database, Table 생성 가능 |
CREATE ROUTINE |
Function, Procedure, Trigger 생성 가능 |
CREATE TABLESPACE |
TableSpace, Log file groups 생성 가능 |
CREATE TEMPORARY TABLES |
Temporary Table 생성 가능 |
CREATE USER |
User 생성, 삭제, 변경 가능 |
CREATE VIEW |
View 생성 및 변경 가능 |
DELETE |
Delete 명령어 사용 가능 |
DROP | Database, Table, View 삭제 가능 |
EVENT | Event 사용 가능 |
FILE | SELECT.. INTO OUTFILE LOAD DATA INFILE 명령어 사용 가능 |
INDEX | Index 생성 및 삭제 가능 |
INSERT | Insert 명령어 사용 가능 |
LOCK TABLES | select 권한이 있을 경우 LOCK TABLES 사용 가능 |
PROCESS | Show Process 명령어 사용 가능 |
RELOAD | FLUSH 명령어 사용 가능 |
SELECT | Select 명령어 사용 가능 |
SHOW DATABASES | 전체 Databases 목록을 보여줌 |
SHUTDOWN | Shutdown(mysql 서비스 종료) 명령어 사용 가능 |
UPDATE | Update 명령어 사용 가능 |
GRANT (권한 부여)
GRANT 명령어는 사용자에게 권한을 부여하는 명령어 입니다.
위에 있는 권한 종류 중에서 필요한 권한을 선택하여 사용하면 되는데요, GRANT 명령어는 아래와 같은 형태로 사용합니다.
→ GRANT [권한1, 권한2, 권한3 ...] ON [Database].[Table] to [사용자]@"[접근범위]" identified by '[비밀번호]';
ex 1) GRANT select, insert, update, delete, create, drop ON test.* to admin@"localhost" identified by 'test1234';
의미 : admin 계정 localhost 에서 접속한 경우에 한해서 "test" DB의 모든 테이블에 select, insert, update, delete, create, drop 권한을 부여함
ex 2) GRANT all ON *.* to admin@"localhost" identified by 'test1234' ;
의미 : admin 계정 localhost 에서 접속한 경우에 한해서 모든 DB, 모든 테이블에, 모든 권한을 부여함
GRANT 명령어는 사용자 추가 기능도 같이 존재하기 때문에 별도의 사용자 계정 추가 작업을 할 필요가 없습니다.
위의 예시에 사용자 명을 "admin"으로 지정했는데요, admin 계정이 별도로 존재하지 않더라도 위 명령어를 그대로 실행하면 admin계정이 생성되면서 위 권한이 부여되는 것을 확인하실 수 있습니다.
root 계정처럼 사용자 권한을 제어 수 있는 계정을 생성하고 싶다면, 아래와 같이 GRANT 옵션 마지막에 "WITH GRANT OPTION"을 추가해주시면 됩니다.
ex) GRANT select, insert, update, delete, create, drop ON test.* to admin@"localhost" identified by 'test1234' WITH GRANT OPTION;
의미 : admin계정 localhost 에서 접속한 경우에 한해 사용자 권한 제어 및 "test" DB의 모든 테이블에 select, insert, update, delete, create, drop 권한 부여
REVOKE (권한 제거)
REVOKE 명령어는 사용자에게 권한을 제거하는 명령어 입니다.
해당 사용자의 권한을 확인 한 뒤에 불필요한 권한을 제거해야 하는데요, 우선 권한을 확인할 수 있는 명령어가 필요합니다.
권한 확인 명령어
→ SHOW GRANTS FOR '[사용자]'@'[접근범위]';
ex) SHOW GRANTS FOR 'admin'@'localhost';
위 이미지처럼 해당 사용자가 어떤 권한을 가지고 있는지 확인할 수 있는 것을 볼 수 있습니다.
자, 그럼 위 사용자의 권한을 확인했으니 불필요한 권한을 제거할 차례입니다. REVOKE 명령어는 아래와 같은 형태로 사용합니다.
→ REVOKE [권한1, 권한2, 권한3 ...] ON [Database].[Table] to [사용자]@"[접근범위]";
ex 1) REVOKE insert, update, create ON test.* to admin@"localhost";
의미 : admin 계정 localhost 에서 접속한 경우에 한해서 "test" DB의 모든 테이블에 insert, update, create 권한을 제거함
root 계정처럼 사용자 권한을 제어 수 있는 권한을 제거하고 싶다면, 아래와 같이 사용하면 됩니다.
ex 1) REVOKE grant option ON test.* to admin@"localhost";
의미 : admin계정 localhost 에서 접속한 경우에 한해서 사용자 권한 제어 권한 제거
글을 마치며
블로그를 개설하고 첫번째 게시글이네요
잘 써보겠다고 열심히 썼는데 도움이 되셨을지는 모르겠습니다 ㅎㅎ;;
혹시라도 내용이 잘못되었다거나 하는 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
긴 글 읽어주셔서 감사합니다