Hak istimewa pada INSERT di PostGIS / QGIS

12

Saya mencoba untuk menetapkan hak istimewa dalam database saya untuk pengguna sehingga mereka hanya dapat memperbarui, menyisipkan, menghapus dan, tentu saja, pilih pada tabel geografis.

Karena saya menggunakan beberapa jenis SERIAL untuk ID saya, saya lebih suka untuk bahkan tidak memberikan pengguna kemungkinan untuk mengedit bidang ini secara manual. Jadi saya mendefinisikan keistimewaan kolom-bijaksana. Ini berfungsi dengan baik pada bagian UPDATE, tetapi tombol di QGIS memungkinkan penciptaan objek baru tetap abu-abu. Satu-satunya cara tampaknya berfungsi adalah ketika saya tidak menentukan bidang apa pun dalam definisi hak istimewa. Bahkan ketika saya memilih semua bidang itu tidak berfungsi (meskipun saya akan berpikir bahwa tidak menentukan kolom apa pun dan menetapkan semuanya akan sama).

Tampaknya ada sesuatu yang saya tidak mengerti, atau ada batasan dalam definisi hak istimewa untuk interaksi yang tepat antara DB dan QGIS. Adakah yang memiliki informasi atau saran yang dapat membantu saya memahami apa yang sedang terjadi, dan / atau (bahkan lebih baik) membantu saya mencapai tujuan saya?

Saya selalu bisa mengatasinya dengan menetapkan bidang sebagai tidak dapat diedit dalam definisi gaya, tetapi karena siapa pun dapat mengaturnya sesuka mereka, saya lebih suka alternatif yang lebih aman.

Menjalankan QGIS 2.14, PostGIS 2.3 untuk PostgreSQL 9.5.

GuiOm Clair
sumber
Apakah Anda menggunakan perintah GRANT SQL untuk menetapkan hak pengguna (hak istimewa)? Apakah Anda GRANT INSERT di meja Anda?
Zoltan
@ Zoltan Ya, permintaan saya miripGRANT INSERT (col2, col3, col4) ON table TO users
GuiOm Clair
5
Pengguna yang harus memiliki hak INSERT harus memiliki hak penuh ke kolom kunci utama. Kalau tidak, dia tidak akan bisa melakukan penyisipan. Saya tidak berpikir ada jalan keluarnya. Anda hanya dapat membatasi visibilitas kolom itu di QGIS, seperti yang telah Anda sebutkan.
Micha
1
@Micha Ok kalau begitu, memang masuk akal mengatakan seperti itu ... Saya kira saya juga punya solusi lain dengan pemicu khusus kolom ON INSERT DO NOTHING dan ON UPATEATE NOT NOTING untuk kunci utama, yang akan mencegah pengeditan manual dari kunci utama. Terima kasih.
GuiOm Clair
3
Atau Anda membuat tampilan tabel Anda tidak termasuk kolom SERIAL dan hanya memberikan akses ke tampilan itu.
JoeBe

Jawaban:

0

Pengguna yang harus memiliki hak INSERT harus memiliki hak penuh ke kolom kunci utama. Kalau tidak, dia tidak akan bisa melakukan penyisipan. Saya tidak berpikir ada jalan keluarnya. Anda hanya dapat membatasi visibilitas kolom itu di QGIS, seperti yang telah Anda sebutkan.

Mengenai komentar Anda: column-specific trigger ON INSERT DO NOTHING and ON UPDATE DO NOTHING for the primary keySaya tidak yakin itu akan berhasil. Saat memasukkan baris baru, kunci primer baru harus dibuat, jelas. Anda tidak ingin mengelak dari itu.

Micha
sumber