PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL:Berikan semua izin kepada pengguna di database PostgreSQL

Semua perintah harus dijalankan saat terhubung ke cluster database yang tepat. Pastikan itu.

Peran adalah objek dari database cluster . Semua database dari cluster yang sama berbagi set peran yang ditentukan. Hak istimewa diberikan / dicabut per database / skema / tabel dll.

Sebuah peran membutuhkan akses ke database , jelas sekali. Itu diberikan kepada PUBLIC secara default. Lainnya:

GRANT CONNECT ON DATABASE my_db TO my_user;

Hak istimewa dasar untuk Postgres 14 atau lebih baru

Postgres 14 menambahkan peran non-login yang telah ditentukan sebelumnya pg_read_all_data / pg_write_all_data .
Mereka memiliki SELECT / INSERT , UPDATE , DELETE hak istimewa untuk semua tabel, tampilan, dan urutan. Ditambah USAGE pada skema. Kami dapat GRANT keanggotaan dalam peran ini:

GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;

Ini mencakup semua perintah DML dasar (tetapi bukan DDL, dan bukan beberapa perintah khusus seperti TRUNCATE atau EXECUTE hak istimewa untuk fungsi!). Panduan:

pg_read_all_data

Membaca semua data (tabel, tampilan, urutan), seolah-olah memiliki SELECT hak atas objek tersebut, dan USAGE hak pada semua skema, bahkan tanpa secara eksplisit. Peran ini tidak memiliki atribut peranBYPASSRLS mengatur. Jika RLS sedang digunakan, administrator mungkin ingin mengatur BYPASSRLS pada peran yang peran ini adalah GRANT ed ke.

pg_write_all_data

Tulis semua data (tabel, tampilan, urutan), seolah-olah memiliki INSERT ,UPDATE , dan DELETE hak atas objek tersebut, dan USAGE hak pada semua skema, bahkan tanpa memilikinya secara eksplisit. Peran ini tidak memiliki atribut peran BYPASSRLS mengatur. Jika RLS sedang digunakan, administrator mungkin ingin mengatur BYPASSRLS pada peran di mana peran iniGRANT ed ke.

Semua hak istimewa tanpa menggunakan peran yang telah ditentukan sebelumnya (versi Postgres apa pun)

Perintah harus dijalankan saat terhubung ke database yang benar. Pastikan itu.

Peran membutuhkan (setidaknya) USAGE hak istimewa pada skema . Sekali lagi, jika itu diberikan kepada PUBLIC , Anda dilindungi. Lainnya:

GRANT USAGE ON SCHEMA public TO my_user;

Atau berikan USAGE di semua skema khusus:

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
$$;

Kemudian, semua izin untuk semua tabel (membutuhkan Postgres 9.0 atau lebih baru).
Dan jangan lupa urutan (jika ada):

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;

Atau, Anda dapat menggunakan "Grant Wizard" dari pgAdmin 4 untuk bekerja dengan GUI.

Ada beberapa objek lain, manual untuk GRANT memiliki daftar lengkap. Pada Postgres 12:

hak istimewa pada objek database (tabel, kolom, tampilan, tabel asing, urutan, database, pembungkus data asing, server asing, fungsi, prosedur, bahasa prosedural, skema, atau tablespace)

Tapi sisanya jarang dibutuhkan. Selengkapnya:

  • Bagaimana cara mengelola HAK ISTIMEWA DEFAULT untuk PENGGUNA pada DATABASE vs SCHEMA?
  • Berikan hak istimewa untuk database tertentu di PostgreSQL
  • Cara memberikan semua hak istimewa pada tampilan kepada pengguna sewenang-wenang

Pertimbangkan untuk meningkatkan ke versi saat ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengembangkan PostgreSQL untuk Windows, Bagian 3

  2. Mendaftar dan Mengganti Basis Data di PostgreSQL

  3. Memulai Replikasi Streaming PostgreSQL

  4. Mengapa saya tidak dapat mengecualikan kolom dependen dari `GROUP BY` saat saya mengagregasi berdasarkan kunci?

  5. Oracle ke PostgreSQL:sintaks gabungan luar ANSI di PostgreSQL