개요
MySQL에서 특정 사용자가 데이터베이스의 모든 저장 프로시저(Stored Procedure)를 실행할 수 있도록 권한을 부여하려면 GRANT EXECUTE 문을 사용하면 됩니다. 이 글에서는 전체 사용자 목록을 확인하는 방법부터 실제 권한을 부여하는 과정까지 단계별로 살펴보겠습니다.
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 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)
호스트 값이 %인 사용자는 모든 호스트에서 접속 가능하며, localhost로 지정된 사용자는 로컬 서버에서만 접속할 수 있습니다.
2단계: 저장 프로시저 실행 권한 부여
이제 사용자 'Robert'(호스트 %)에게 web 데이터베이스에 있는 모든 저장 프로시저의 실행 권한을 부여해 보겠습니다.
mysql> GRANT EXECUTE ON web.* TO 'Robert'@'%';
권한이 정상적으로 부여되면 다음과 같은 메시지가 출력됩니다.
Query OK, 0 rows affected (0.24 sec)
추가 설명
GRANT EXECUTE: 저장 프로시저나 함수를 호출·실행할 수 있는 권한을 의미합니다.web.*:web데이터베이스 내의 모든 객체(저장 프로시저 포함)에 대해 권한을 적용한다는 뜻입니다. 특정 프로시저에만 권한을 주고 싶다면web.procedure_name처럼 개별 지정도 가능합니다.'Robert'@'%': 사용자명과 호스트를 함께 지정하는 형식으로, 호스트가%이므로 어느 클라이언트에서 접속하더라도 권한이 적용됩니다.
권한 변경 후에는 FLUSH PRIVILEGES; 명령을 실행하여 권한 테이블을 갱신해 주는 것이 좋습니다. 이렇게 하면 해당 사용자는 지정된 데이터베이스의 모든 저장 프로시저를 자유롭게 실행할 수 있습니다.