Có, theo thiết kế, con trỏ có thể hoạt động khác với SELECT
giống nhau truy vấn có thể hoạt động nếu nó được thực thi bởi người dùng đã gọi thủ tục.
Nếu bạn không chỉ định DEFINER
khi bạn tạo một chương trình được lưu trữ (proc, chức năng, trình kích hoạt hoặc sự kiện) hoặc một dạng xem, thì đối tượng, khi được truy cập, sẽ chạy với các đặc quyền của người dùng đã xác định nó ban đầu, chứ không phải người dùng gọi nó.
Bạn có ba tùy chọn, tại đây:
- Xác minh hoặc có thể sửa đổi các quyền của
DEFINER
hiện tại người dùng nếu thích hợp; hoặc, - Chỉ định một
DEFINER
khác người dùng khi xác định chương trình hoặc chế độ xem được lưu trữ ... bạn có thể thực hiện việc này miễn là bạn (người tạo đối tượng) cóSUPER
đặc quyền và người dùng gọi (truy cập) đối tượng sẽ tạm thời có các quyền củaDEFINER
đó người dùng thay thế; hoặc, - Thêm
SQL SECURITY INVOKER
theo định nghĩa của thủ tục, hàm và chế độ xem (mặc dù không phải là trình kích hoạt hoặc sự kiện), khiến đối tượng chạy với các đặc quyền của người dùng đã gọi nó, thay vì trình định nghĩa, đó là hành vi mặc định.
Để xem các quyền mà trình định nghĩa hiện có có, chẳng hạn nếu bạn thấy DEFINER =`someguy` @` localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';
Bạn có thể tìm thấy trình định nghĩa hiện tại trong định nghĩa của thủ tục, với SHOW CREATE PROCEDURE procedure_name;
.