TL; DR: Pengguna baru dapat membuat tabel dalam public
skema karena orang mengeluh bahwa itu terlalu sulit ketika mereka tidak bisa.
Jika Anda tidak menyukai default, Anda mungkin harus membuat database template baru dengan konfigurasi awal yang Anda inginkan. Misalnya, Anda dapat:
DROP SCHEMA public;
atau
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
di templat Anda.
Jika Anda ingin public
pengguna tidak memiliki hak pada database, Anda juga harus:
REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;
sehingga public
pengguna tidak dapat membuat skema atau menggunakan tabel temp.
Secara pribadi, jika saya mendesain ini, saya akan memberikan pengguna TEMP
hak pada database secara default, tetapi tidak CREATE
(skema dalam database) atau CREATE
(tabel dalam public
skema). Saya akan memesannya untuk pemilik.
Itu adalah pilihan yang dibuat sejak lama, dan cukup sulit untuk mengubahnya sekarang.
Seperti adanya, ada keluhan reguler bahwa terlalu sulit untuk memulai dengan PostgreSQL karena Anda harus membuat akun pengguna dan sering ingin membuat database juga. Mengapa tidak kita buat otomatis saja dan default ke 'trust' sebagai mode auth agar mudah? Mengapa postgres
pengguna tidak memiliki kata sandi default postgres
? Mengapa kita tidak membuat pengguna secara otomatis jika mereka ada di OS? dll.
Ada beberapa masalah kegunaan asli untuk pengguna baru - khususnya, kebanyakan orang tidak tahu apa itu peer
auth, atau mengapa hanya berjalan psql
setelah menginstal PostgreSQL memberi tahu mereka bahwa tidak ada pengguna dengan nama yang mereka masuki.
Ini juga berantakan yang pg_hba.conf
merupakan file konfigurasi, tetapi pengguna dibuat di tingkat SQL. Perpecahan ini membingungkan pengguna.
Namun, banyak hal yang merupakan kompromi antara default aman dan default mudah di mana proyek tidak akan pernah membuat semua orang bahagia.
revoke create on database [databasename] from [username];
dan DB sekarang benar-benar hanya dibaca untuk [nama pengguna]. Baik? Saya akan kembali ke jawaban ini lagi ketika saya telah membaca buku Postgres yang bagus :)