PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Có cách nào để tắt cập nhật / xóa nhưng vẫn cho phép trình kích hoạt thực hiện chúng không?

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ì?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật hoặc Chèn (nhiều hàng và cột) từ truy vấn con trong PostgreSQL

  2. Postgres Sao chép từ Biến với dữ liệu CSV

  3. COPY hoạt động như thế nào và tại sao nó nhanh hơn INSERT rất nhiều?

  4. LỖI:chuỗi được trích dẫn chưa kết thúc tại hoặc gần

  5. Kết nối Orbeon Forms Postgres DB