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

DEFINER có bắt buộc khi tạo Stored Procedure trong MySQL không?

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:

  • DEFINER yêu cầu quyền SUPER (hoặc SET_USER_ID từ 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 DEFINER trừ khi cần thiết cụ thể (ví dụ: procedure truy cập bảng cần quyền cao hơn caller).