Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Khắc phục lỗi DEFINER=`root`@`%` không hoạt động trên localhost trong Stored Procedure

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'