Saya agak bingung tentang pengaturan izin di PostgreSQL.
Saya memiliki peran ini:
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
admin | Superuser, Create role, Create DB, Replication | {}
meltemi | Create role, Create DB | {rails}
rails | Create DB, Cannot login | {}
myapp | | {rails}
dan basis data:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
pengguna myapp
tidak memiliki masalah meminta myapp_production
database menambahkan & menghapus catatan. Saya ingin meltemi
juga dapat meminta database yang sama. Jadi, saya membuat peran rails
yang memiliki database dan membuat keduanya meltemi
dan myapp
anggota rails
. Tapi saya masih mendapatkan permission denied for relation
kesalahan. Meltemi
dapat melihat skema tetapi tidak dapat meminta DB.
Saya hanya melihat (dengan \dt
perintah) yaitu myapp
pemilik tabel:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
Tabel dibuat melalui ORM (migrasi ActiveRecord Rails ').
Saya tahu otorisasi sangat berbeda di PostgreSQL (berbeda dengan MySQL & yang lain yang pernah saya gunakan). Bagaimana saya mengatur database saya sehingga pengguna yang berbeda dapat mengaksesnya. Beberapa harus dapat CRUD tetapi yang lain hanya dapat membaca, dll ...
Terima kasih atas bantuannya. Maaf, saya tahu ini adalah pertanyaan yang sangat mendasar tetapi saya belum dapat menemukan jawabannya sendiri.
sumber
myapp
alih-alih dirails
atas? Karenamyapp
memiliki tabel (saya tidak pernah menentukan itu, migrasi harus ada). Bagaimanapun, akan lebih masuk akal jika saya berganti namamyapp
menjadimyapp_group
dan kemudian membuat pengguna barumyapp
yang aplikasi rel akan gunakan untuk terhubung ke DB. Buatmyapp
dan yang adameltemi
, kedua anggotamyapp_group
peran. Tetapi apa yang terjadi ketika saya menjalankan migrasi berikutnya. bukankah itu akan dimiliki denganmyapp
menciptakan kembali masalah lagi?!?roles
(sejak versi 8.1). Persyaratanuser
dangroup
disimpan untuk alasan historis dan kompatibilitas. Pada dasarnya "grup" adalah peran tanpa hak masuk. Anda dapat memberikanmyapp
kemeltemi
bahkan jikamyapp
hanyalah "pengguna". Mulailah dengan membaca manual di sini .roles
vsgroups
vsusers
di Postgres, setidaknya saya pikir saya mengerti . Maaf menggunakan terminologi yang salah (dan membingungkan) di atas. Tapi saya masih tidak mengerti cara mengatur basis data saya sehingga peran tanpa-masuk SENDIRI pada basis data dan dua peran masukmyapp
danmeltemi
keduanya dapat memiliki akses penuh. Salah satu peran itumyapp
akan menjalankan migrasi Rails yang, mau tidak mau?, Membuat tabel baru yang, sekali lagi, dimiliki olehmyapp
, seorang pengguna login. Haruskah saya membuatmeltemi
'anggota'myapp
dan selesai dengan itu? Tapi itu sepertinya kludgy ... tidak?!?myapp
dimilikimeltemi
, maka itu akan menjadi hal yang benar untuk dilakukan. Jika Anda inginmeltemi
mendapatkan hanya sebagian dari hak istimewa, itu tidak akan terjadi. Kemudian buat peran kelompok untuk memegang set hak istimewa dan berikan itumeltemi
. Anda kemungkinan besar akan tertarik pada pertanyaan terkait ini di SO . Saya menjawab menjelaskanDEFAULT PRIVILEGES
SET ROLE
perintah ke awal migrasi dan aRESET ROLE
sampai akhir, tapi saya tidak akan percaya Rails untuk menjalankan semuanya dengan rapi secara berurutan. Erwin benar; dalam hal ini solusi terbaikGRANT
adalah rel pengguna memberikan kepemilikan kepada pengguna lain, menggunakan pengguna pertama sebagai grup untuk pengguna kedua.