Lỗi thường xảy ra khi DEFINER chỉ định host '%' nhưng kết nối từ 'localhost'. Cần đảm bảo user DEFINER tồn tại với host khớp.
Kiểm tra user hiện có
mysql> select user,host from MySQL.user;
Kết quả mẫu (có user 'Bob'@'%'):
+------------------+-----------+ | user | host | +------------------+-----------+ | Bob | % | | root | % | | David | localhost | | ... | ... | +------------------+-----------+
Tạo Stored Procedure với DEFINER khớp
mysql> DELIMITER //
mysql> CREATE DEFINER=`Bob`@`%` PROCEDURE `Message`()
BEGIN
select "Hello World";
END
//
Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;Gọi thủ tục
mysql> call `Message`();
+-------------+ | Hello World | +-------------+ | Hello World | +-------------+
Giải pháp thường gặp:
- Tạo user với host '%' và 'localhost' cả hai
- Dùng
CREATE DEFINER=CURRENT_USERđể tự động lấy user hiện tại - Sửa DEFINER của procedure đã tạo:
ALTER PROCEDURE ... DEFINER = 'user'@'host'