Saya harus kehilangan sesuatu sehubungan dengan pengaturan PostgreSQL. Yang ingin saya lakukan adalah membuat banyak basis data dan pengguna yang diisolasi satu sama lain sehingga pengguna tertentu hanya memiliki akses ke database yang saya tentukan. Namun, dari apa yang saya dapat tentukan, setiap pengguna yang dibuat memiliki akses ke semua database tanpa ada hibah khusus yang diberikan.
Inilah yang saya lakukan pada Ubuntu Server 12.04:
- apt-get install postgresql
- sudo -u postgres createuser -DRSP mike1 (Menentukan kata sandi untuk pengguna baru)
- sudo -u postgres dibuatb data1
- psql -h localhost -U mike1 data1 (Menentukan kata sandi untuk pengguna mike1 untuk login)
Tampaknya pengguna baru "mike1" tidak memiliki masalah menghubungkan ke database "data1" dan membuat tabel dll. Dan ini tanpa menjalankan perintah GRANT sama sekali (dan pemilik "data1" adalah "postgres" karena saya tidak menentukan pemilik pada langkah 3). Apakah ini benar-benar cara kerjanya?
Yang ingin saya lakukan adalah memberikan mike1 akses penuh ke data1 dan kemudian ulangi ini untuk lebih banyak pengguna dan basis data, memastikan bahwa pengguna hanya memiliki akses ke satu (atau mungkin beberapa) basis data pilihan saya.
sumber
Jawaban:
Pada tingkat SQL, setiap pengguna memang dapat terhubung ke database yang baru dibuat, sampai perintah SQL berikut dikeluarkan:
Setelah selesai, setiap pengguna atau peran yang harus dapat terhubung harus diberikan secara eksplisit hak istimewa koneksi:
Sunting: Dalam skenario multi-penyewa, lebih dari sekadar
connect
hak istimewa akan dihapus. Untuk tips multi-tenancy dan praktik terbaik, Anda mungkin ingin membaca di wiki publik postgresql: Hosting Basis Data Bersama dan Mengelola hak dalam PostgreSQL .sumber
postgres
dapat mengakses semua database.PUBLIC memiliki akses ke database secara default, tetapi tidak dapat mengakses data. Anda dapat REVOKE PUBLIC:
Jika Anda ingin pengaturan ini untuk semua basis data masa depan, cabut CONNECT pada basis data templat1 (templat basis data default untuk membuat basis data baru):
sumber
Selain mencabut hak koneksi dari PUBLIC secara default, dan memberikannya sesuai keinginan, level lain di mana Anda dapat mengontrol akses adalah melalui file pg_hba.conf.
Anda dapat menemukan di mana file disimpan dengan:
Jika Anda memilih untuk menggunakan mekanisme ini, ada komentar yang tertanam yang mungkin cukup untuk Anda mulai. Dokumen ada di sini:
http://www.postgresql.org/docs/current/interactive/auth-pg-hba-conf.html
sumber
GRANT
/REVOKE
yang dibahas dalam jawaban lain mungkin lebih mudah. Untuk satu hal, Anda hanya perlu koneksi database superuser untuk itu, dibandingkan membutuhkan login OS yang dapat mengedit file.Saya menemukan utas ini mencari cara untuk mencegah pengguna bahkan mendaftarkan nama basis data lainnya. Itu
REVOKE CONNECT
tidak mencegah ini.Sesuai jawaban untuk pertanyaan SO ini, tidak ada cara (yang disarankan) untuk mencapainya.
sumber