PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apakah ada cara untuk menonaktifkan pembaruan/penghapusan tetapi masih mengizinkan pemicu untuk melakukannya?

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?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menambahkan kunci asing ke model Rails

  2. Buat kolom secara dinamis untuk tab silang di PostgreSQL

  3. Django + Postgres + Deret Waktu Besar

  4. Switchover/Switchback di Slony-I saat memutakhirkan PostgreSQL versi utama 8.4.x/9.3.x

  5. Perbaiki "ERROR:setiap kueri INTERSECT harus memiliki jumlah kolom yang sama" di PostgreSQL