FirebirdSQL logo

Die SQL SECURITY-Klausel verschiedener DDL-Anweisungen ermöglicht es, ausführbare Objekte (Trigger, gespeicherte Prozeduren, gespeicherte Funktionen) so zu definieren, dass sie in einem bestimmten Kontext von Berechtigungen ausgeführt werden.

Die SQL-Sicherheitsfunktion hat zwei Kontexte: INVOKER und DEFINER.Der Kontext "INVOKER" entspricht den Privilegien, die dem aktuellen Benutzer oder dem aufrufenden Objekt zur Verfügung stehen, während "DEFINERE" denen entspricht, die dem Eigentümer des Objekts zur Verfügung stehen.

Die Eigenschaft SQL SECURITY ist ein optionaler Teil einer Objektdefinition, der mit DDL-Anweisungen auf das Objekt angewendet werden kann.Die Eigenschaft kann nicht gelöscht werden, aber sie kann von INVOKER in DEFINER und umgekehrt geändert werden.

Dies ist nicht dasselbe wie SQL-Berechtigungen, die auf Benutzer und einige Arten von Datenbankobjekten angewendet werden, um ihnen verschiedene Arten von Zugriff auf andere Datenbankobjekte zu ermöglichen.Wenn ein ausführbares Objekt Firebird Zugriff auf eine Tabelle, Ansicht oder ein anderes ausführbares Objekt benötigt, kann auf das Zielobjekt nicht zugegriffen werden, wenn der Aufrufer nicht über die erforderlichen Berechtigungen für dieses Objekt verfügt.Das war in früheren Firebird-Versionen der Fall und bleibt es auch in Firebird 4.0.Das heißt, standardmäßig haben alle ausführbaren Objekte die Eigenschaft SQL SECURITY INVOKER, und alle Aufrufer, denen die erforderlichen Berechtigungen fehlen, werden abgewiesen.Das standardmäßige SQL-Sicherheitsverhalten einer Datenbank kann mit ALTER DATABASE überschrieben werden.

Wenn auf eine Routine die Eigenschaft SQL SECURITY DEFINER angewendet wird, kann der aufrufende Benutzer oder die aufrufende Routine sie ausführen, wenn ihrem Besitzer die erforderlichen Berechtigungen gewährt wurden, ohne dass dem Aufrufer diese Berechtigungen ebenfalls gewährt werden müssen.

In Summe:

  • Wenn INVOKER gesetzt ist, werden die Zugriffsrechte zum Ausführen des Aufrufs zu einem ausführbaren Objekt durch Überprüfung der aktiven Privilegien des aktuellen Benutzers bestimmt

  • Wenn DEFINER gesetzt ist, werden stattdessen die Zugriffsrechte des Objektbesitzers angewendet, unabhängig von den aktiven Privilegien des aktuellen Benutzers.