PostgreSQL - Siapa atau apa peran "PUBLIC"?

11

Saya melihat information_schema.role_table_grantsketika saya melihat publicdi granteekolom, maka saya sudah memeriksa information_schema.enabled_rolestetapi ini role_nametidak ada.

=> Siapa atau apa publicperannya?

Gugelhupf
sumber

Jawaban:

9

Langsung dari manual:

Kata kunci PUBLIC menunjukkan bahwa hak istimewa harus diberikan kepada semua peran, termasuk yang mungkin dibuat nanti. PUBLIC dapat dianggap sebagai kelompok yang didefinisikan secara implisit yang selalu mencakup semua peran. Setiap peran tertentu akan memiliki jumlah hak istimewa yang diberikan secara langsung kepadanya, hak istimewa yang diberikan kepada peran apa pun yang saat ini menjadi anggotanya, dan hak istimewa yang diberikan kepada PUBLIC.

seekor kuda tanpa nama
sumber
7

Meskipun ini benar, ini bukan gambaran lengkap. Publik juga bertindak sebagai peran implisit yang dimiliki oleh peran lain dan yang memiliki izinnya sendiri yang tidak selalu tercermin dan dilaporkan yang diwarisi.

Secara default itu memberi izin membuat skema publik. ketika Anda tidak menghapus ini semua langkah-langkah lain yang benar untuk membuat hasil baca-saja pengguna di pengguna itu juga dapat membuat objek baru di skema publik dan kemudian karena kepemilikan memasukkan data di dalamnya. Untuk mencegahnya

REVOKE ALL ON SCHEMA public FROM PUBLIC;

Demikian pula itu juga memberikan izin pada tingkat basis data, untuk menghapus penggunaan

REVOKE ALL ON DATABASE all_database FROM PUBLIC;

Artikel bagus di sini: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf

Ruan Malan N
sumber