MENDENGARKAN / MEMPERHATIKAN hak istimewa

9

Saya memiliki database postgres tunggal, dengan dua pengguna; Alice dan Bob.

Saya ingin dapat melakukan NOTIFY alice_channel 'sensitive data'tanpa Bob dapat secara diam-diam LISTENhanya dengan menebak bahwa nama salurannya adalah 'alice_channel'.

Dalam prakteknya nama-nama channel yang sangat sulit ditebak, tapi ini adalah keamanan melalui ketidakjelasan di terbaik.

Apakah saya benar karena meyakini bahwa tidak ada cara untuk mencegah pengguna basis data menggunakan (menyalahgunakan) LISTEN& NOTIFY? yaitu tidak ada hak istimewa terkait yang dapat diberikan atau dicabut.

Apakah ini jalan buntu?

Chris Farmiloe
sumber
Saya tidak tahu cara mengecualikan pengguna dari mendengarkan. Tetapi jika Anda memilih nama untuk saluran seperti Anda akan memilih kata sandi yang aman, bukankah ini akan berhasil?
Erwin Brandstetter
Ya, itulah yang saya lakukan saat ini (menggunakan string acak besar), tetapi rasanya kotor dan agak membatasi. Ada beberapa hal keren yang bisa saya lakukan dengan LISTEN/ NOTIFYjika saya bisa menguncinya sedikit. Seperti yang sudah ada, itu agak berbelit-belit "menyodok klien untuk melakukan polling ulang untuk semua data yang Anda 'butuhkan' fitur".
Chris Farmiloe
Saya hanya ingin tahu apakah ada yang berubah sejak ini dijawab. Apakah Anda dapat mengimplementasikan sesuatu?
Phill Pafford
Jika Anda tidak dapat mempercayai aplikasi Anda, Anda tidak boleh membiarkannya masuk. Saya pikir itu adalah jalan buntu dalam sistem produksi. Sudah ada proposal untuk privs terkait. postgresql.org/message-id/51CC98FB.9040700%40agliodbs.com
Anssi

Jawaban:

4

Tidak ada izin pada LISTENdan NOTIFY. Tidak masuk akal untuk memilikinya sampai dukungan untuk pemberitahuan muatan diperkenalkan dalam versi yang lebih baru.

Jika Anda ingin kontrol akses, buat tabel dengan informasi yang Anda inginkan dan kemudian kirim NOTIFYyang kosong atau tidak memiliki apa-apa selain kunci utama untuk tabel di dalamnya. SELECTbaris yang menarik dari tabel, yang dapat memiliki kontrol akses, untuk mendapatkan data sensitif. Ini dulunya satu-satunya cara untuk menggunakan LISTENdan NOTIFYmengirim data tertentu sebelum muatan ditambahkan.

Craig Ringer
sumber
Terima kasih Craig, saya juga banyak berpikir. Saya mungkin mengintip sumbernya dan melihat betapa sulitnya untuk mengimplementasikan tetapi saya kira itu akan membutuhkan tingkat basis data yang benar-benar baru AclModedan pg_database_aclcheckmenelepon ke suatu tempat, sudah lama sejak saya melihat: /
Chris Farmiloe