본문 바로가기

Development/DB

[MySQL] 사용자에게 권한 부여 또는 제거하는 방법


안녕하세요 

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 목록을 보여줌
 (해당 권한이 없는 경우에는 자신의 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 에서 접속한 경우에 한해서 사용자 권한 제어 권한 제거


글을 마치며


블로그를 개설하고 첫번째 게시글이네요 

잘 써보겠다고 열심히 썼는데 도움이 되셨을지는 모르겠습니다 ㅎㅎ;;

혹시라도 내용이 잘못되었다거나 하는 부분이 있다면 댓글로 알려주시면 감사하겠습니다.


긴 글 읽어주셔서 감사합니다