GRANT
s pada objek yang berbeda terpisah. GRANT
ing pada database tidak GRANT
berhak atas skema di dalamnya. Demikian pula, GRANT
menggunakan skema tidak memberikan hak atas tabel di dalamnya.
Jika Anda memiliki hak untuk SELECT
dari tabel, tetapi tidak memiliki hak untuk melihatnya dalam skema yang memuatnya maka Anda tidak dapat mengakses tabel.
Uji hak dilakukan dengan urutan:
Do you have `USAGE` on the schema?
No: Reject access.
Yes: Do you also have the appropriate rights on the table?
No: Reject access.
Yes: Check column privileges.
Kebingungan Anda mungkin timbul dari kenyataan bahwa public
skema memiliki default GRANT
semua hak atas peran public
, di mana setiap pengguna / grup adalah anggotanya. Jadi setiap orang sudah menggunakan skema itu.
Frasa:
(dengan asumsi bahwa persyaratan hak istimewa objek juga terpenuhi)
Mengatakan bahwa Anda harus memiliki USAGE
skema untuk menggunakan objek di dalamnya, tetapi memiliki USAGE
skema tidak dengan sendirinya cukup untuk menggunakan objek dalam skema, Anda juga harus memiliki hak atas objek itu sendiri.
Ini seperti pohon direktori. Jika Anda membuat direktori somedir
dengan file somefile
di dalamnya kemudian mengaturnya sehingga hanya pengguna Anda sendiri yang dapat mengakses direktori atau file (mode rwx------
pada dir, mode rw-------
pada file) maka tidak ada orang lain yang dapat membuat daftar direktori untuk melihat bahwa file tersebut ada.
Jika Anda memberikan hak membaca dunia atas file (mode rw-r--r--
) tetapi tidak mengubah izin direktori, tidak ada bedanya. Tidak ada yang dapat melihat file untuk membacanya, karena mereka tidak memiliki hak untuk mencantumkan direktori.
Jika Anda malah menyetel rwx-r-xr-x
pada direktori, menyetelnya sehingga orang dapat membuat daftar dan melintasi direktori tetapi tidak mengubah izin file, orang dapat membuat daftar file tetapi tidak dapat membacanya karena mereka tidak memiliki akses ke file.
Anda perlu menyetel kedua izin agar orang benar-benar dapat melihat file tersebut.
Hal yang sama di Pg. Anda memerlukan USAGE
hak skema dan hak objek untuk melakukan tindakan pada objek, seperti SELECT
dari tabel.
(Analoginya jatuh sedikit di yang PostgreSQL tidak memiliki keamanan tingkat baris lagi, jadi pengguna masih bisa "melihat" bahwa tabel ada dalam skema oleh SELECT
ing dari pg_class
langsung. Mereka tidak bisa berinteraksi dengan cara apapun , meskipun, jadi hanya bagian "daftar" yang tidak persis sama.)
CREATE EXTENSION
. Ini kurang lebih masalah yang sama dengan file yang dibuat di Linux saat Andasu
. Akan lebih baik jika ada semacamsudo -e
pernyataan for di pqsl.GRANT
pernyataan yang tidak spesifik untuk tabel bukanlah yang saya inginkan, karena mereka mempengaruhi semua database ...: sGRANT
pada skema yang mempengaruhi skema itu.GRANT ... ON ALL TABLES IN SCHEMA ...
mempengaruhi semua tabel dalam skema dalam database tertentu. Tidak adaGRANT
yang mempengaruhi semua database (ok, kecualiGRANT
keanggotaan peran untuk pengguna).psql
tanpa-d db
Anda mengoperasikan "di luar" db apa pun, tetapi Anda selalu terhubung ke db dan secara default Anda terhubung ke db dengan nama yang sama dari peran Anda. db = role = user = group ... ini agak membingungkan: DWITH LOGIN
; pada dasarnya, semuanya bisa menjadi grup, dan grup dapat diatur untuk dapat masuk.Untuk sistem produksi, Anda dapat menggunakan konfigurasi ini:
sumber
admin
juga harus diberikanCREATE
pada skema?GRANT USAGE ON SCHEMA
, pengguna admin tidak dapat membuat tabel tetapi dia dapat melakukannya denganALL GRANT ALL ON SCHEMA
....grant all on schema public to admin
? PS: Saya menambahkan jugagrant usage, select on all sequences in schema public to read_only/read_write;
grant execute on all functions in schema public to read_only/read_write;
Nah, ini adalah solusi terakhir saya untuk db sederhana, untuk Linux:
sumber