HIBAH
s pada objek yang berbeda terpisah. HIBAH
ing pada database tidak GRANT
hak atas skema di dalamnya. Demikian pula, GRANT
menggunakan skema tidak memberikan hak pada tabel di dalamnya.
Jika Anda memiliki hak untuk SELECT
dari tabel, tetapi tidak tepat untuk melihatnya dalam skema yang memuatnya maka Anda tidak dapat mengakses tabel tersebut.
Tes hak dilakukan secara berurutan:
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 fakta bahwa publik
skema memiliki default GRANT
semua hak atas peran publik
, di mana setiap pengguna/grup adalah anggotanya. Jadi semua orang sudah menggunakan skema itu.
Frasa:
(dengan asumsi bahwa persyaratan hak istimewa objek sendiri juga terpenuhi)
Mengatakan bahwa Anda harus memiliki USAGE
pada skema untuk menggunakan objek di dalamnya, tetapi memiliki USAGE
pada skema saja tidak 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 atur sehingga hanya pengguna Anda sendiri yang dapat mengakses direktori atau file (mode rwx-------code> pada direktori, mode
rw-------
pada file) maka tidak ada orang lain yang dapat membuat daftar direktori untuk melihat bahwa file tersebut ada.
Jika Anda memberikan hak baca dunia pada file (mode rw-r--r--
) tetapi tidak mengubah izin direktori, tidak ada bedanya. Tidak ada yang bisa melihat file untuk membacanya, karena mereka tidak memiliki hak untuk membuat daftar direktori.
Jika Anda malah menyetel rwx-r-xr-x
pada direktori, menyetelnya agar orang dapat membuat daftar dan melintasi direktori tetapi tidak mengubah izin file, orang dapat mendaftar file tetapi tidak dapat membaca karena mereka tidak memiliki akses ke file tersebut.
Anda perlu mengatur keduanya izin bagi orang untuk benar-benar dapat melihat file tersebut.
Hal yang sama di Hal. Anda memerlukan keduanya skema USAGE
hak dan hak objek untuk melakukan tindakan pada objek, seperti SELECT
dari sebuah tabel.
(Analoginya sedikit menurun karena PostgreSQL belum memiliki keamanan tingkat baris, sehingga pengguna masih dapat "melihat" bahwa tabel ada dalam skema dengan SELECT
ing dari pg_class
secara langsung. Namun, mereka tidak dapat berinteraksi dengannya, jadi hanya bagian "daftar" yang tidak persis sama.)