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

MySQL에서 사용자에게 정의된 권한을 확인하는 방법

MySQL 사용자 권한 조회하기: SHOW GRANTS 명령어

MySQL에서 특정 사용자에게 부여된 권한을 확인하려면 SHOW GRANTS 문을 사용하면 됩니다. 기본 문법은 다음과 같습니다.

SHOW GRANTS FOR '사용자이름'@'호스트이름';

1단계: MySQL.user 테이블에서 사용자 목록 확인

먼저 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 Smith       | localhost |
| Chris            | localhost |
| David            | localhost |
| James            | localhost |
| John             | localhost |
| John Doe         | localhost |
| User1            | localhost |
| am               | localhost |
| hbstudent        | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
+------------------+-----------+
20 rows in set (0.00 sec)

호스트 값이 %로 표시되는 경우, 해당 사용자가 모든 호스트에서 접속 가능하다는 의미입니다.

2단계: SHOW GRANTS로 특정 사용자의 권한 확인

이제 SHOW GRANTS 문을 사용하여 특정 사용자 'Robert'에게 부여된 권한을 조회해 보겠습니다.

mysql> SHOW GRANTS FOR 'Robert'@'%';

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

+----------------------------------------------------------------------+
| Grants for Robert@%                                                  |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `Robert`@`%`                                   |
| GRANT ALL PRIVILEGES ON `sample`.* TO `Robert`@`%` WITH GRANT OPTION |
| GRANT EXECUTE ON `web`.* TO `Robert`@`%`                             |
+----------------------------------------------------------------------+
3 rows in set (0.05 sec)

결과 해석

위 예제에서 SHOW GRANTS는 호스트 '%'에 속한 사용자 Robert의 권한 정보를 반환합니다. 각 행의 의미는 다음과 같습니다.

GRANT USAGE ON *.* — USAGE는 실질적인 권한이 없음을 나타내는 자리표시자(placeholer) 권한으로, 계정이 존재하지만 전역(global) 수준에서는 아무 권한도 가지지 않음을 뜻합니다.
GRANT ALL PRIVILEGES ON `sample`.* — 'sample' 데이터베이스의 모든 테이블에 대해 모든 권한을 가지며, WITH GRANT OPTION에 따라 다른 사용자에게 권한을 위임할 수도 있습니다.
GRANT EXECUTE ON `web`.* — 'web' 데이터베이스의 저장 프로시저나 함수를 실행할 수 있는 권한을 가집니다.

이처럼 SHOW GRANTS 명령어를 활용하면 MySQL 서버 내 특정 계정이 어떤 데이터베이스와 테이블에 대해 어떤 작업을 수행할 수 있는지 한눈에 파악할 수 있어, 보안 점검이나 권한 관리 시 매우 유용합니다.