Tất cả các lệnh phải được thực hiện trong khi kết nối với cụm cơ sở dữ liệu bên phải. Hãy chắc chắn rằng nó.
Vai trò là các đối tượng của cơ sở dữ liệu cụm . Tất cả các cơ sở dữ liệu của cùng một cụm chia sẻ tập hợp các vai trò đã xác định. Các đặc quyền được cấp / thu hồi trên mỗi cơ sở dữ liệu / lược đồ / bảng, v.v.
Một vai trò cần quyền truy cập vào cơ sở dữ liệu , chắc chắn. Điều đó được cấp cho PUBLIC
theo mặc định. Khác:
GRANT CONNECT ON DATABASE my_db TO my_user;
Các đặc quyền cơ bản dành cho Postgres 14 trở lên
Postgres 14 thêm các vai trò không đăng nhập, được xác định trước pg_read_all_data
/ pg_write_all_data
.
Họ có SELECT
/ INSERT
, UPDATE
, DELETE
đặc quyền cho tất cả bảng, dạng xem và chuỗi. Cộng với USAGE
trên các lược đồ. Chúng tôi có thể GRANT
tư cách thành viên trong các vai trò sau:
GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;
Điều này bao gồm tất cả các lệnh DML cơ bản (nhưng không phải DDL và không phải một số lệnh đặc biệt như TRUNCATE
hoặc EXECUTE
đặc quyền cho các chức năng!). Hướng dẫn sử dụng:
pg_read_all_data
Đọc tất cả dữ liệu (bảng, dạng xem, chuỗi), như thể có
SELECT
quyền trên các đối tượng đó vàUSAGE
quyền trên tất cả các lược đồ, ngay cả khi không chia sẻ nó một cách rõ ràng. Vai trò này không có thuộc tính vai tròBYPASSRLS
đặt. Nếu RLS đang được sử dụng, quản trị viên có thể muốn đặtBYPASSRLS
trên các vai trò mà vai trò này làGRANT
ed thành.
pg_write_all_data
Ghi tất cả dữ liệu (bảng, dạng xem, chuỗi), như thể có
INSERT
,UPDATE
vàDELETE
quyền trên các đối tượng đó vàUSAGE
quyền đối với tất cả các lược đồ, ngay cả khi không có nó một cách rõ ràng. Vai trò này không có thuộc tính vai tròBYPASSRLS
đặt. Nếu RLS đang được sử dụng, quản trị viên tương tự có thể muốn đặtBYPASSRLS
trên các vai trò mà vai trò này làGRANT
ed thành.
Tất cả các đặc quyền mà không cần sử dụng các vai trò được xác định trước (bất kỳ phiên bản Postgres nào)
Các lệnh phải được thực thi khi được kết nối với cơ sở dữ liệu phù hợp. Hãy chắc chắn rằng nó.
Vai trò cần (ít nhất) USAGE
đặc quyền trên giản đồ . Một lần nữa, nếu điều đó được cấp cho PUBLIC
, bạn được bảo hiểm. Khác:
GRANT USAGE ON SCHEMA public TO my_user;
Hoặc cấp USAGE
trên tất cả lược đồ tùy chỉnh:
DO
$$
BEGIN
-- RAISE NOTICE '%', ( -- use instead of EXECUTE to see generated commands
EXECUTE (
SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
FROM pg_namespace
WHERE nspname <> 'information_schema' -- exclude information schema and ...
AND nspname NOT LIKE 'pg\_%' -- ... system schemas
);
END
$$;
Sau đó, tất cả các quyền cho tất cả bảng (yêu cầu Postgres 9.0 hoặc sau này).
Và đừng quên trình tự (nếu có):
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;
Ngoài ra, bạn có thể sử dụng "Grant Wizard" của pgAdmin 4 để làm việc với GUI.
Có một số đối tượng khác, hướng dẫn sử dụng cho GRANT
có danh sách đầy đủ. Kể từ Postgres 12:
các đặc quyền trên một đối tượng cơ sở dữ liệu (bảng, cột, dạng xem, bảng ngoại, chuỗi, cơ sở dữ liệu, trình bao bọc dữ liệu nước ngoài, máy chủ nước ngoài, hàm, thủ tục, ngôn ngữ thủ tục, lược đồ hoặc không gian bảng)
Nhưng phần còn lại hiếm khi cần thiết. Thêm chi tiết:
- Cách quản lý QUYỀN RIÊNG TƯ CHO NGƯỜI DÙNG trên CƠ SỞ DỮ LIỆU so với SCHEMA?
- Cấp đặc quyền cho một cơ sở dữ liệu cụ thể trong PostgreSQL
- Cách cấp tất cả các đặc quyền về lượt xem cho người dùng tùy ý
Cân nhắc nâng cấp lên phiên bản hiện tại.