Tôi cũng muốn khoản trợ cấp này tiếp tục tồn tại để tạo bảng mới trong tương lai. [...] Tôi đã nạo vét tài liệu và tôi dường như không tìm được giải pháp phù hợp.
Bởi vì trước đó 9.0 không có. Tất cả những gì bạn có thể nhận được là đặt các quyền cho các bảng hiện có. Bạn phải thực hiện một GRANT
cho mỗi bảng, vì trước đó 9.0 không có chế độ "hàng loạt". Xem các ngữ pháp SQL cho 8.4 và 9.0:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
và 9.0 ở đây:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Các ALL TABLES IN SCHEMA
phần mới là một trong những bạn đang thiếu.
Ngoài ra: Đặt quyền trên cấp cơ sở dữ liệu như trong câu hỏi của bạn sẽ không giúp bạn: Bạn sẽ "chỉ" đặt quyền trên cơ sở dữ liệu của mình chứ không phải trên bất kỳ nội dung "chứa" nào như bảng. Các phần có liên quan:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Có nghĩa là bạn chỉ có thể đặt CREATE
, CONNECT
và TEMP
quyền truy cập vào cơ sở dữ liệu riêng của mình nhưng không có SELECT
, INSERT
, vv
Cho đến nay cho những thứ xấu. Những gì bạn có thể làm là những điều sau đây:
Giảm số lượng quản lý cho phép bằng cách cấp quyền không cho người dùng nhưng để vai trò. Sau đó, thêm vai trò cho từng người dùng. Khi một bảng mới được tạo, bạn chỉ cần điều chỉnh một hoặc hai vai trò, nhưng không cần phải có hàng trăm người dùng.
Truy vấn danh mục hệ thống và tạo các lệnh GRANT
thích hợp. Lưu chúng vào một tập tin và thực thi tập tin đó. Điều này sẽ giúp bạn khởi động dễ dàng hơn.
một truy vấn như vậy có thể trông như thế này:
select 'GRANT ALL ON ' || table_schema || '.' || table_name ||' to my_group;'
from information_schema.tables
where
table_type = 'BASE TABLE' and
table_schema not in ('pg_catalog', 'information_schema');
Tại sao bạn không thể nâng cấp? Chắc chắn phải có một cách để nâng cấp PostgreSQL. Tất cả các phiên bản hiện tại có thể được tải xuống từ trang web của Postgres. –
Có những cách chắc chắn để nâng cấp, nhưng tôi không muốn các gói do nhà cung cấp cung cấp được tích hợp, kiểm tra và hiểu rõ. Kế hoạch của chúng tôi là lên đến 9,1 cùng một lúc Debian wheezy được tuyên bố là ổn định. – pointyhat
Tôi sẽ không bao giờ hiểu tại sao một số hệ điều hành bảo trợ cho người dùng nhiều như vậy. –