Ano, je to možné.
Spouštěče jsou spouštěny s oprávněními spouštěcí funkce, výchozí nastavení je SECURITY INVOKER
což znamená, že spouštěcí funkce je efektivně vykonávána s právy current_user
, ve vašem případě ten, který vkládá řádky.
Pokud aktuální uživatel nemá požadovaná oprávnění pro tabulky, se kterými pracuje vaše spouštěcí funkce, vaše původní operace v podkladové tabulce bude chybná.
Nicméně , můžete použít SECURITY DEFINER
aby spouštěcí funkce byla tato funkce spuštěna s oprávněními OWNER
funkce.
Pokud máte superuživatele vlastní spouštěcí funkce, dokáže vše - což by bylo možné bezpečnostní riziko. Zvažte pokyny v příručce o psaní SECURITY DEFINER
Funguje bezpečně.
Ale je moudřejší vytvořit prostou roli pouze s nezbytnými oprávněními OWNER
spouštěcí funkce. Můžete dokonce jen vytvořit roli „démona“ bez přihlášení, která funguje jako balíček oprávnění pro takové operace. Pak byste této roli démona udělili pouze potřebná oprávnění (ke schématům, tabulkám, sekvencím...). U sofistikovanějších návrhů byste měli sbalit oprávnění ve „skupinových rolích“ (opět žádné přihlášení) a udělit tyto skupinové role rolím, které to potřebují (v tomto příkladu roli démona), čímž z nich efektivně uděláte „členy skupiny“. Dělám to často.
Zvažte tuto související odpověď na dba.SE týkající se oprávnění k samotné funkci:
- Jaká jsou oprávnění potřebná ke spuštění spouštěcí funkce v PostgreSQL 8.4?