MySQL 서버의 모든 데이터베이스·모든 테이블에 SELECT 권한 부여하기
MySQL 서버에 존재하는 모든 데이터베이스의 모든 테이블에 대해 특정 사용자에게 읽기(SELECT) 권한을 한 번에 부여하려면 GRANT SELECT 문을 활용하면 됩니다. 이 방법은 여러 개의 데이터베이스를 운영하는 환경에서 개별적으로 권한을 설정하는 번거로움을 크게 줄여 줍니다.
1. GRANT SELECT 기본 문법
권한을 부여하는 기본 문법은 아래와 같습니다.
GRANT SELECT ON *.* TO 'yourUserName'@'yourHostName';
여기서 *.*는 '모든 데이터베이스의 모든 테이블'을 의미합니다. 즉, 위 구문을 실행하면 해당 사용자가 서버 전체의 모든 테이블을 조회할 수 있게 됩니다.
2. 기존 사용자 목록 확인하기
권한을 부여하기 전에 먼저 MySQL 서버에 등록된 사용자와 호스트 정보를 확인하는 것이 좋습니다. 다음 쿼리를 실행해 보세요.
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 | | Emma | localhost | | Jace | localhost | | James | localhost | | John | localhost | | John Doe | localhost | | Michael | localhost | | Mike | localhost | | Robert | localhost | | User1 | localhost | | am | localhost | | hbstudent | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | +------------------+-----------+ 26 rows in set (0.00 sec)
위 결과에서 %는 '어떤 호스트에서든 접속 가능함'을 의미하고, localhost는 '해당 서버 내부에서만 접속 가능함'을 뜻합니다.
3. 실제로 GRANT SELECT 적용하기
이번에는 hbstudent@localhost 사용자에게 모든 데이터베이스에 대한 SELECT 권한을 부여해 보겠습니다.
mysql> GRANT SELECT ON *.* TO 'hbstudent'@'localhost'; Query OK, 0 rows affected (0.00 sec)
'Query OK' 메시지가 출력되면 권한 부여가 성공적으로 완료된 것입니다. 이제 hbstudent 사용자는 서버의 모든 데이터베이스와 모든 테이블을 조회할 수 있습니다.
참고: 모든 데이터베이스에 대한 권한을 부여하는 것은 보안상 민감할 수 있으므로, 상황에 따라 특정 데이터베이스나 테이블 단위로 권한 범위를 좁혀 설정하는 것이 더 안전합니다.