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?