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

PostgreSQL 8.4 memberikan hak istimewa DML di semua tabel ke sebuah peran

Saya juga ingin agar hibah ini tetap ada untuk pembuatan tabel baru di masa mendatang.[...] Saya telah menelusuri dokumentasi dan sepertinya saya tidak dapat menemukan solusi yang sesuai.

Karena sebelum 9.0 tidak ada. Yang bisa Anda dapatkan hanyalah mengatur izin untuk yang ada tabel. Anda harus melakukan satu GRANT untuk setiap tabel, karena sebelum 9.0 tidak ada mode "massal". Lihat tata bahasa SQL untuk 8.4 dan 9.0:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] tablename [, ...]
    TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]

dan 9.0 di sini:

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 ]

ALL TABLES IN SCHEMA yang baru bagian yang Anda lewatkan.

Juga:Mengatur izin pada tingkat basis data seperti pada pertanyaan Anda tidak akan membantu Anda:Anda akan "hanya" mengatur izin pada basis data, tetapi tidak pada hal-hal "berisi" seperti tabel. Bagian yang relevan:

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE dbname [, ...]
    TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]

Yang berarti Anda hanya dapat mengatur CREATE , CONNECT dan TEMP izin pada database itu sendiri tetapi tidak ada SELECT , INSERT dll.

Sejauh ini untuk hal-hal buruk. Apa yang dapat Anda lakukan adalah sebagai berikut:

  • Kurangi jumlah manajemen izin dengan memberikan hak bukan kepada pengguna tetapi untuk peran. Kemudian tambahkan peran ke pengguna individu. Saat tabel baru dibuat, Anda hanya perlu menyesuaikan satu atau dua peran, bukan ratusan pengguna.

  • Minta katalog sistem dan buat GRANT yang sesuai perintah. Simpan ke dalam file dan jalankan file itu. Ini akan memberi Anda permulaan yang lebih mudah.

Kueri semacam itu mungkin terlihat seperti ini:

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');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Anda menggabungkan dua tabel pada bidang kunci asing menggunakan Django ORM?

  2. Cara mendapatkan daftar parameter fungsi (sehingga saya bisa menjatuhkan fungsi)

  3. Nonaktifkan pemeriksaan kunci asing PostgreSQL untuk migrasi

  4. org.postgresql.util.PSQLException:FATAL:maaf, sudah terlalu banyak klien

  5. org.postgresql.util.PSQLException:Indeks kolom di luar jangkauan:3, jumlah kolom:2