Câu trả lời của tôi tương tự như câu trả lời này trên ServerFault.com .
Bảo thủ
Nếu bạn muốn tiết chế hơn việc cấp "tất cả các đặc quyền", bạn có thể muốn thử một cái gì đó tương tự hơn.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
Việc sử dụng public
ở đó đề cập đến tên của lược đồ mặc định được tạo cho mọi cơ sở dữ liệu / danh mục mới. Thay thế bằng tên của chính bạn nếu bạn đã tạo một lược đồ.
Truy cập vào Lược đồ
Để truy cập vào một lược đồ, đối với bất kỳ hành động nào, người dùng phải được cấp quyền "sử dụng". Trước khi người dùng có thể chọn, chèn, cập nhật hoặc xóa, trước tiên người dùng phải được cấp "quyền sử dụng" đối với một lược đồ.
Bạn sẽ không nhận thấy yêu cầu này khi lần đầu tiên sử dụng Postgres. Theo mặc định, mọi cơ sở dữ liệu có một lược đồ đầu tiên được đặt tên public
. Và mọi người dùng theo mặc định đã tự động được cấp quyền "sử dụng" đối với lược đồ cụ thể đó. Khi thêm lược đồ bổ sung, bạn phải cấp quyền sử dụng một cách rõ ràng.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Trích từ tài liệu Postgres :
Đối với các lược đồ, cho phép truy cập vào các đối tượng có trong lược đồ được chỉ định (giả sử rằng các yêu cầu đặc quyền riêng của đối tượng cũng được đáp ứng). Về cơ bản, điều này cho phép người được cấp quyền "tra cứu" các đối tượng trong lược đồ. Nếu không có quyền này, vẫn có thể xem tên đối tượng, ví dụ bằng cách truy vấn các bảng hệ thống. Ngoài ra, sau khi thu hồi quyền này, các phần mềm phụ trợ hiện có có thể có các câu lệnh đã thực hiện tra cứu này trước đó, vì vậy đây không phải là cách hoàn toàn an toàn để ngăn truy cập đối tượng.
Để biết thêm thảo luận, hãy xem Câu hỏi, Việc sử dụng CẤP PHÉP TRÊN SCHEMA chính xác là gì? . Đặc biệt chú ý đến câu trả lời của chuyên gia Craig Ringer của Postgres .
Đối tượng hiện tại so với tương lai
Các lệnh này chỉ ảnh hưởng đến các đối tượng hiện có. Các bảng và các bảng tương tự bạn tạo trong tương lai sẽ nhận được các đặc quyền mặc định cho đến khi bạn thực hiện lại các dòng đó ở trên. Xem câu trả lời khác của Erwin Brandstetter để thay đổi các giá trị mặc định do đó ảnh hưởng đến các đối tượng trong tương lai.