본문 바로가기
Database/MySQL

[MySQL] 사용자 권한을 부여, 조회, 취소하는 명령어 모음 및 예제 정리 - GRANT, SHOW, REVOKE

by Blue Developer 2021. 9. 28.

들어가기에 앞서

본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다.

이번 게시물에서는 데이터베이스의 사용자에게 권한을 부여하고 취소하는 명령어인 DCL(Data Control Language)에 대해서 알아보도록 하겠습니다.

GRANT - 데이터베이스 사용자에게 권한 부여

# test@localhost 계정에 모든 권한 부여
mysql> GRANT ALL [PRIVILEGES] ON user TO test@localhost;
Query OK, 0 rows affected (0.01 sec)

# test1@localhost 계정에 SELECT, INSERT, UPDATE, DELETE, ALTER 권한 부여
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ALTER ON user TO test1@localhost;
Query OK, 0 rows affected (0.01 sec)

test 계정처럼 모든 권한을 부여할 수도 있고, test1 계정처럼 일부 권한만 부여할 수도 있습니다.

SHOW - 데이터베이스 사용자의 권한 조회

mysql> SHOW GRANTS FOR test@localhost;
+--------------------------------------------------------------+
| Grants for test@localhost                                    |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test`@`localhost`                     |
| GRANT ALL PRIVILEGES ON `mysql`.`user` TO `test`@`localhost` |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> SHOW GRANTS FOR test1@localhost;
+-------------------------------------------------------------------------------+
| Grants for test1@localhost                                                    |
+-------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test1`@`localhost`                                     |
| GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON `mysql`.`user` TO `test1`@`localhost` |
+-------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

만약에 계정을 생성할 때 @localhost 또는 @'%'를 사용자 ID 뒤에 붙여줬다면 'SHOW' 명령어를 사용할 때도 마찬가지로 뒤에 붙여줘야만 합니다.

REVOKE - 데이터베이스 사용자에게 권한 부여 취소

# test 계정에서 DELETE 권한을 제거
mysql> REVOKE DELETE ON user FROM test@localhost;
Query OK, 0 rows affected (0.01 sec)

# test1 계정에서 모든 권한을 제거
mysql> REVOKE ALL [PRIVILEGES] ON user FROM test1@localhost;
Query OK, 0 rows affected (0.01 sec)

'REVOKE' 명령어는 'GRANT' 명령어와 달리 'TO' 대신에 'FROM'을 사용합니다.

# test 계정에서 DELETE 권한을 제거한 결과
mysql> SHOW GRANTS FOR test@localhost;
+-----------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for test@localhost                                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test`@`localhost`                                                                                                      |
| GRANT SELECT, INSERT, UPDATE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `mysql`.`user` TO `test`@`localhost` |
+-----------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

# test1 계정에서 모든 권한을 제거한 결과
mysql> SHOW GRANTS FOR test1@localhost;
+-------------------------------------------+
| Grants for test1@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `test1`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

모든 권한을 부여받은 test 계정에서 'DELETE' 권한을 제거한 결과를 통해서 사용자에게 부여할 수 있는 권한은 'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'CREATE', 'DROP', 'REFERENCES', 'INDEX', 'ALTER', 'CREATE VIEW', 'SHOW VIEW', 'TRIGGER'로 총 12가지의 권한이 존재함을 알 수 있습니다.

댓글