Không bắt buộc. DEFINER chỉ cần thiết khi bạn muốn chỉ định tài khoản thực thi procedure với quyền của người đó (Security Definer). Mặc định là tài khoản tạo procedure (CURRENT_USER).
Xem danh sách user/host
SELECT user, host FROM mysql.user;
Tạo procedure với DEFINER
DELIMITER //
CREATE DEFINER = 'Adam Smith'@'localhost' PROCEDURE Sp_Definer()
BEGIN
SELECT 'Hello MySQL';
END //
DELIMITER ;
Gọi procedure
CALL Sp_Definer();
+-------------+
| Hello MySQL |
+-------------+
| Hello MySQL |
+-------------+
Lưu ý bảo mật:
DEFINERyêu cầu quyềnSUPER(hoặcSET_USER_IDtừ MySQL 8.0).- Nếu user definer bị xóa, procedure vẫn tồn tại nhưng có thể lỗi khi gọi.
- Khuyến nghị: Không dùng
DEFINERtrừ khi cần thiết cụ thể (ví dụ: procedure truy cập bảng cần quyền cao hơn caller).