PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy istnieje sposób na wyłączenie aktualizacji/usuwania, ale nadal zezwalanie na ich wykonywanie przez wyzwalacze?

Tak, to możliwe.

Wyzwalacze są uruchamiane z uprawnieniami funkcji wyzwalacza, domyślnie SECURITY INVOKER co oznacza, że ​​funkcja wyzwalacza jest skutecznie wykonywana z uprawnieniami current_user , w twoim przypadku ten, który wstawia wiersze.

Jeśli bieżący użytkownik nie ma wymaganych uprawnień do tabel, na których działa funkcja wyzwalacza, pierwotna operacja w tabeli bazowej zakończy się błędem.

Jednak , możesz użyć SECURITY DEFINER aby funkcja wyzwalacza działała z uprawnieniami OWNER funkcji.

Jeśli masz superużytkownika własnego funkcja wyzwalacza, może zrobić wszystko - co stanowiłoby potencjalne zagrożenie bezpieczeństwa. Rozważ instrukcje zawarte w podręczniku na temat pisania SECURITY DEFINER Działa bezpiecznie.

Ale rozsądniej jest stworzyć prostą rolę z niezbędnymi uprawnieniami OWNER funkcji wyzwalania. Możesz nawet po prostu utworzyć rolę „demon” bez logowania, działając jako pakiet uprawnień dla takich operacji. Następnie nadasz tej roli demona tylko potrzebne uprawnienia (do schematów, tabel, sekwencji...). W przypadku bardziej wyrafinowanych projektów należy połączyć uprawnienia w „rolach grupowych” (ponownie, bez logowania) i przyznać te role grupowe rolom, które ich potrzebują (w tym przykładzie roli demona), skutecznie czyniąc je „członkami grupy”. Często to robię.

Rozważ powiązaną odpowiedź na dba.SE dotyczącą uprawnień w samej funkcji:

  • Jakie uprawnienia są wymagane do wykonania funkcji wyzwalacza w 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. Deklaratywny SQLAlchemy:definiowanie wyzwalaczy i indeksów (Postgres 9)

  2. Zoptymalizuj zapytanie z PRZESUNIĘCIEM na dużym stole

  3. Dodanie „serial” do istniejącej kolumny w Postgres

  4. Jak porównać daty w polach datetime w Postgresql?

  5. Aktualizacja Postgresql z dołącz