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

PostgreSQL:Cấp tất cả các quyền cho người dùng trên cơ sở dữ liệu PostgreSQL

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 đặt BYPASSRLS 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 , UPDATEDELETE 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 đặt BYPASSRLS 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bánh xe xây dựng không thành công cho psycopg2 - MacOSX sử dụng virtualenv và pip

  2. Tại sao tôi không thể sử dụng bí danh cột trong biểu thức SELECT tiếp theo?

  3. Cách bảo mật cơ sở dữ liệu PostgreSQL của bạn - 10 mẹo

  4. Cách sử dụng hàm chuỗi con trong PostgreSQL và Redshift

  5. Giới hạn kích thước của kiểu dữ liệu JSON trong PostgreSQL