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

MySQL 저장 프로시저 생성 시 DEFINER 절은 필수일까요?

결론부터 말하면 아니요, 저장 프로시저를 생성할 때 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 테이블에 실제로 존재해야 하며, 존재하지 않는 계정을 지정하면 오류가 발생합니다.