들어가기에 앞서
본 게시물은 '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가지의 권한이 존재함을 알 수 있습니다.
댓글