Có, điều này là có thể.
Trình 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à, hàm 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à chèn các hàng.
Nếu người dùng hiện tại không có các đặc quyền cần thiết cho các bảng mà chức năng kích hoạt của bạn hoạt động, thì thao tác ban đầu của bạn trong bảng bên dưới sẽ xảy ra lỗi.
Tuy nhiên , bạn có thể sử dụng SECURITY DEFINER
cho chức năng kích hoạt để chức năng này chạy với các đặc quyền của OWNER
của hàm.
Nếu bạn có một siêu người dùng riêng chức năng kích hoạt, nó có thể làm mọi thứ - mà có thể là một nguy cơ an ninh. Xem xét các hướng dẫn trong sách hướng dẫn về việc Viết SECURITY DEFINER
Các chức năng một cách an toàn.
Nhưng sẽ khôn ngoan hơn nếu thực hiện 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ỉ tạo một vai trò "daemon" mà không cần đăng nhập, hoạt động như một gói đặc quyền 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, chuỗi ...) 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 "vai trò nhóm" (một lần nữa, không cần đăng nhập) và cấp các vai trò nhóm này cho các vai trò cần nó (với vai trò daemon trong ví dụ này), biến chúng thành "thành viên của nhóm" một cách hiệu quả. Tôi làm điều đó rất nhiều.
Hãy xem xét câu trả lời liên quan này trên dba.SE liên quan đến các đặc quyền trên chính hàm:
- Các đặc quyền cần thiết để thực thi một hàm kích hoạt trong PostgreSQL 8.4 là gì?