Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 특정 사용자의 모든 권한 확인하는 방법 (SHOW GRANTS)

MySQL에서는 SHOW GRANTS 명령어를 사용해 특정 사용자에게 부여된 모든 권한을 간단히 확인할 수 있습니다. 이번 글에서는 먼저 서버에 등록된 전체 사용자 목록을 조회한 뒤, 특정 사용자의 권한을 확인하는 과정을 예제와 함께 단계별로 살펴보겠습니다.

1단계: 전체 사용자 및 호스트 목록 조회

MySQL 시스템 테이블인 mysql.user를 조회하면 서버에 등록된 모든 사용자 계정과 해당 호스트 정보를 한눈에 확인할 수 있습니다.

mysql> select user, host from mysql.user;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| Bob              | %         |
| Charlie          | %         |
| Robert           | %         |
| User2            | %         |
| mysql.infoschema | %         |
| mysql.session    | %         |
| mysql.sys        | %         |
| root             | %         |
| @UserName@       | localhost |
| Adam             | localhost |
| Adam Smith       | localhost |
| Chris            | localhost |
| David            | localhost |
| James            | localhost |
| John             | localhost |
| John Doe         | localhost |
| Michael          | localhost |
| Mike             | localhost |
| User1            | localhost |
| am               | localhost |
| hbstudent        | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
+------------------+-----------+
23 rows in set (0.00 sec)

참고: host 값이 %인 계정은 모든 호스트(원격 접속 포함)에서 접근할 수 있으며, localhost는 로컬 접속만 허용됩니다. 사용자 이름이 같더라도 호스트가 다르면 MySQL에서는 별개의 계정으로 처리됩니다.

2단계: 특정 사용자의 모든 권한 확인

예를 들어 John@localhost 계정에 부여된 모든 권한을 확인하려면 아래와 같이 SHOW GRANTS FOR 구문에 사용자 계정을 지정합니다.

mysql> show grants for 'John'@'localhost';

실행 결과는 다음과 같습니다.

+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for John@localhost                                                                                                                                                                                                                                                                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `John`@`localhost` |
| GRANT BACKUP_ADMIN,BINLOG_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SET_USER_ID,SYSTEM_VARIABLES_ADMIN,XA_RECOVER_ADMIN ON *.* TO `John`@`localhost`                                                                                                                                                                                                                                 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.07 sec)

출력 결과 해석

  • ON *.* : 모든 데이터베이스와 모든 테이블에 대해 권한이 적용됨을 의미합니다.
  • 기본 권한: SELECT, INSERT, UPDATE, DELETE 등 데이터 조작 권한과 CREATE, DROP, ALTER 등 객체 관리 권한이 포함되어 있습니다.
  • 관리 권한: RELOAD, SHUTDOWN, SUPER, CREATE USER 등 서버 수준의 강력한 관리 권한도 함께 부여되어 있습니다.
  • 동적 권한: BACKUP_ADMIN, BINLOG_ADMIN, SYSTEM_VARIABLES_ADMIN 등 MySQL 8.0에서 도입된 세부 관리 권한들이 추가로 부여되어 있습니다.

추가 팁: 현재 사용자의 권한 확인하기

현재 로그인한 자신의 권한만 확인하고 싶다면 계정을 생략하고 다음과 같이 실행하면 됩니다.

mysql> show grants;
-- 또는
mysql> show grants for current_user;

이처럼 SHOW GRANTS 명령어를 활용하면 사용자별 권한 현황을 빠르게 파악할 수 있어, 보안 점검이나 권한 감사 작업에 매우 유용합니다.