Có, điều này là có thể.
Kích hoạt được chạy với các đặc quyền của chức năng kích hoạt, mặc định là SECURITY INVOKER
có nghĩa là, chức năng kích hoạt được thực thi hiệu quả với các đặc quyền của current_user
, trong trường hợp của bạn là một hàng chèn.
Nếu người dùng hiện tại không có các đặc quyền bắt buộc đối với các bảng mà hàm kích hoạt của bạn hoạt động, hoạt động ban đầu của bạn trong bảng bên dưới sẽ bị lỗi.
Tuy nhiên, bạn có thể sử dụng SECURITY DEFINER
cho chức năng kích hoạt để có chức năng này chạy với những đặc quyền của OWNER
của hàm.
Nếu bạn có một superuser riêng chức năng kích hoạt, nó có thể làm tất cả mọi thứ - đó sẽ là một mối nguy hiểm an ninh tốt. Xem xét các hướng dẫn trong sách hướng dẫn về Writing SECURITY DEFINER
Functions Safely.
Nhưng sẽ khôn ngoan hơn khi tạo một vai trò đơn giản chỉ với các đặc quyền cần thiết OWNER
của hàm kích hoạt. Bạn thậm chí có thể chỉ cần tạo một "daemon" vai trò mà không cần đăng nhập, đóng vai trò như là đặc quyền bó cho các hoạt động như vậy. Sau đó, bạn sẽ chỉ cấp các đặc quyền cần thiết (trên lược đồ, bảng, trình tự ...) cho vai trò daemon này. Đối với các thiết kế phức tạp hơn, bạn nên gộp các đặc quyền trong "các vai trò nhóm" (một lần nữa, không đăng nhập) và cấp các vai trò nhóm này cho các vai trò cần (vai trò daemon trong ví dụ này), có hiệu quả làm cho chúng trở thành "thành viên của nhóm". Tôi làm điều đó rất nhiều.
Cũng xem xét this related question on dba.SE liên quan đến các đặc quyền trên chính hàm đó.
Nguồn
2013-07-26 17:04:57
Nếu trình kích hoạt của bạn cập nhật các hàng đang được chèn - đó là dấu hiệu của thiết kế kém. Bạn có thể hiển thị như một số của bạn gây nên hoặc nói, bạn làm gì với họ? –
Nếu bạn cần 'cập nhật một trường cụ thể' của bản ghi được chèn - bạn có thể chỉ định giá trị mong muốn cho' NEW.specific_field'. Bạn không cần cập nhật riêng. –
Tôi không thiết kế nó, nhưng tôi không biết liệu tôi có thể làm gì tốt hơn để thành thật hay không. Tôi chưa xem xét các trình kích hoạt. Có lẽ tôi có thể sử dụng điều này, tôi không biết. Tôi sẽ cho bạn biết. Cảm ơn – Paco