Làm cách nào để cấp đặc quyền bảng / hàm thả cho một vai trò trong PostgreSQL?


9

Tôi muốn cấp các dropđặc quyền trên tất cả các bảng và hàm (không chỉ những người thuộc sở hữu của người dùng) trong một lược đồ nhất định của cơ sở dữ liệu cụ thể cho một vai trò cụ thể. Tuy nhiên, GRANT ALL PRIVILEGESvẫn chưa đủ và tôi đã không tìm ra cách làm mà không biến vai trò thành siêu người dùng - siêu người dùng có quyền đối với các cơ sở dữ liệu khác trên cùng một máy chủ, đó không phải là điều tôi muốn. Tôi sẽ không nhớ các đặc quyền siêu người dùng giới hạn trong một cơ sở dữ liệu cụ thể, nhưng tôi không chắc làm thế nào để làm điều đó.

Mã của tôi:

CREATE USER _administrator PASSWORD 'pwd12345';
CREATE ROLE administrator NOLOGIN ADMIN _administrator;

GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator;
GRANT ALL PRIVILEGES ON SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO administrator;

administratorlà nhóm myDBquản trị viên cơ sở dữ liệu, _administratorlà vai trò mạnh mẽ nhất mà ứng dụng khách của tôi sẽ có thể đăng nhập với tư cách.

Những gì tôi đã bỏ lỡ hoặc làm sai?

Câu trả lời:


10

Chỉ chủ sở hữu (và siêu nhân) có thể thả đồ vật. Mỗi tài liệu:

Quyền bỏ một đối tượng, hoặc thay đổi định nghĩa của nó theo bất kỳ cách nào, không được coi là một đặc quyền có thể cấp; nó là vốn có của chủ sở hữu, và không thể được cấp hoặc thu hồi. (Tuy nhiên, hiệu ứng tương tự có thể đạt được bằng cách cấp hoặc thu hồi tư cách thành viên trong vai trò sở hữu đối tượng; xem bên dưới.) Chủ sở hữu cũng có tất cả các tùy chọn cấp cho đối tượng.

Vì vậy, hãy administrator sở hữu những đối tượng như vậy mà người dùng sẽ có thể thả.

ALTER FUNCTION foo() OWNER TO administrator;
ALTER TABLE foo      OWNER TO administrator;

Và bạn nhớ để thực sự cấp thành viên nhóm, phải không?

GRANT administrator TO _administrator;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.