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, danUSAGE
hak pada semua skema, bahkan tanpa secara eksplisit. Peran ini tidak memiliki atribut peranBYPASSRLS
mengatur. Jika RLS sedang digunakan, administrator mungkin ingin mengaturBYPASSRLS
pada peran yang peran ini adalahGRANT
ed ke.
pg_write_all_data
Tulis semua data (tabel, tampilan, urutan), seolah-olah memiliki
INSERT
,UPDATE
, danDELETE
hak atas objek tersebut, danUSAGE
hak pada semua skema, bahkan tanpa memilikinya secara eksplisit. Peran ini tidak memiliki atribut peranBYPASSRLS
mengatur. Jika RLS sedang digunakan, administrator mungkin ingin mengaturBYPASSRLS
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.