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.