sql >> Databáze >  >> RDS >> PostgreSQL

Existuje způsob, jak zakázat aktualizace/mazání, ale přesto umožnit spouštěčům je provádět?

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?



  1. Replikace Londiste s PostgreSQL 9.0

  2. Android - Zobrazení uživatelského jména z databáze sqlite po přihlášení v textView

  3. Jak odebrat datový soubor z databáze SQL Server (T-SQL)

  4. Obnovení přístupu ke ztracenému heslu MySQL pro PHPMyAdmin na WAMP