결론부터 말하면 아니요, 저장 프로시저를 생성할 때 DEFINER 절은 필수가 아닙니다. 이는 선택 사항으로, 프로시저의 실행 권한(보안 컨텍스트)을 특정 계정으로 명시적으로 지정하고 싶을 때만 사용합니다.
DEFINER를 생략하면 현재 프로시저를 생성하는 사용자 계정이 자동으로 DEFINER로 설정됩니다.
1단계: mysql.user 테이블에서 사용자와 호스트 확인
먼저 MySQL에 등록된 모든 사용자와 호스트 정보를 확인해 보겠습니다.
mysql> select user,host from mysql.user;
실행 결과는 다음과 같습니다.
+------------------+-----------+ | user | host | +------------------+-----------+ | Manish | % | | User2 | % | | mysql.infoschema | % | | mysql.session | % | | mysql.sys | % | | root | % | | Adam Smith | localhost | | User1 | localhost | | am | localhost | +------------------+-----------+ 9 rows in set (0.03 sec)
2단계: DEFINER를 지정하여 저장 프로시저 생성
이제 위 목록에 있는 'Adam Smith'@'localhost' 계정을 DEFINER로 지정하여 저장 프로시저를 생성해 보겠습니다.
mysql> delimiter //
mysql> CREATE DEFINER = 'Adam Smith'@'localhost' procedure Sp_Definer()
-> begin
-> select 'Hello MySQL';
-> end;
-> //
Query OK, 0 rows affected (0.14 sec)
mysql> delimiter ;3단계: 저장 프로시저 호출하기
생성된 저장 프로시저는 CALL 명령어로 호출합니다. 기본 문법은 다음과 같습니다.
CALL yourStoredProcedureName();
위에서 만든 프로시저를 실제로 호출해 보겠습니다.
mysql> call Sp_Definer();
정상적으로 실행되면 다음과 같은 결과가 출력됩니다.
+-------------+ | Hello MySQL | +-------------+ | Hello MySQL | +-------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
정리
- DEFINER는 선택 사항입니다. 저장 프로시저 생성 시 반드시 작성할 필요가 없습니다.
- DEFINER를 지정하면 해당 프로시저는 지정된 계정의 권한으로 실행됩니다.
- 지정하는 계정은
mysql.user테이블에 실제로 존재해야 하며, 존재하지 않는 계정을 지정하면 오류가 발생합니다.