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

postgresql 9.1 - truy cập bảng thông qua các hàm

Có, điều này có thể làm được.

"superuser" có thể là một superuser thực tế , postgres theo mặc định, tôi đổi tên vai trò cho người dùng thuần túy thành usr , bởi vì user là một từ dành riêng - không sử dụng nó làm định danh.

CREATE ROLE usr;
CREATE ROLE poweruser;
GRANT usr TO poweruser;  -- poweruser can do everything usr can.

CREATE ROLE bob PASSWORD <password>;
GRANT poweruser TO bob;

CREATE ROLE alice PASSWORD <password>;
GRANT usr TO alice;

REVOKE ALL ON SCHEMA x FROM public;
GRANT USAGE ON SCHEMA x TO usr;

REVOKE ALL ON TABLE x FROM public;
REVOKE ALL ON TABLE y FROM public;

CREATE FUNCTION
  ...
SECURITY DEFINER;

REVOKE ALL ON FUNCTION ... FROM public;
GRANT EXECUTE ON FUNCTION a TO usr;
GRANT EXECUTE ON FUNCTION b TO poweruser;

Hoặc bạn có thể tạo các vai trò daemon mà không cần đăng nhập để sở hữu các chức năng và giữ các quyền tương ứng trên bảng. Điều đó thậm chí sẽ an toàn hơn.

Nếu bạn đang đi con đường này, bạn sẽ yêu ALTER DEFAULT PRIVILEGES (được giới thiệu với PostgreSQL 9.0). Thêm chi tiết trong câu trả lời có liên quan này .

Đọc chương Viết SECURITY DEFINER Các chức năng một cách an toàn trong sách hướng dẫn.




  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ác biến do người dùng xác định trong PostgreSQL

  2. Làm thế nào để trích xuất giá trị trung bình?

  3. CTE đệ quy nối các trường với cha mẹ từ điểm tùy ý

  4. postgresql tự tham gia

  5. Chỉ mục một phần không được sử dụng trong mệnh đề ON CONFLICT khi thực hiện nâng cấp trong Postgresql