Ya, ini mungkin.
Pemicu dijalankan dengan hak istimewa fungsi pemicu, default ke SECURITY INVOKER
yang berarti, fungsi pemicu dijalankan secara efektif dengan hak istimewa current_user
, dalam kasus Anda yang memasukkan baris.
Jika pengguna saat ini tidak memiliki hak istimewa yang diperlukan untuk tabel tempat fungsi pemicu Anda beroperasi, operasi awal Anda di tabel yang mendasarinya akan error.
Namun , Anda dapat menggunakan SECURITY DEFINER
agar fungsi pemicu menjalankan fungsi ini dengan hak istimewa OWNER
fungsi.
Jika Anda memiliki pengguna super sendiri fungsi pemicu, dapat melakukan semuanya - yang akan menjadi kemungkinan bahaya keamanan. Perhatikan petunjuk dalam manual tentang Menulis SECURITY DEFINER
Berfungsi dengan Aman.
Tetapi lebih bijaksana untuk membuat peran sederhana hanya dengan hak istimewa yang diperlukan OWNER
dari fungsi pemicu. Anda bahkan dapat membuat peran "daemon" tanpa login, bertindak sebagai bundel hak istimewa untuk operasi semacam itu. Anda kemudian hanya akan memberikan hak istimewa yang diperlukan (pada skema, tabel, urutan ...) untuk peran daemon ini. Untuk desain yang lebih canggih, Anda harus menggabungkan hak istimewa dalam "peran grup" (sekali lagi, tanpa login) dan memberikan peran grup ini ke peran yang membutuhkannya (untuk peran daemon dalam contoh ini), secara efektif menjadikannya "anggota grup". Saya sering melakukannya.
Pertimbangkan jawaban terkait ini di dba.SE mengenai hak istimewa pada fungsi itu sendiri:
- Apa hak istimewa yang diperlukan untuk menjalankan fungsi pemicu di PostgreSQL 8.4?