Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Sicherheit und Berechtigungen für gespeicherte Prozeduren
In diesem Thema werden die Datenbankanmeldedaten beschrieben, die zum Erstellen und Ausführen von gespeicherten Prozeduren erforderlich sind.
Standardmäßig sind alle Benutzer zum Erstellen einer Prozedur berechtigt. Um eine Prozedur zu erstellen, benötigen Sie USAGE Rechte für die Sprache PL/PGSQL, für die Sie standardmäßig berechtigt sind. PUBLIC Nur Superuser und Eigentümer sind standardmäßig berechtigt, eine Prozedur aufzurufen. Superuser können PL/PG SQL von einem Benutzer aus ausführen REVOKEUSAGE, wenn sie verhindern möchten, dass der Benutzer eine gespeicherte Prozedur erstellt.
Um eine Prozedur aufrufen zu können, müssen Sie über EXECUTE Berechtigungen für die Prozedur verfügen. Standardmäßig werden die EXECUTE Rechte für neue Prozeduren dem Eigentümer und den Superusern der Prozedur gewährt. Weitere Informationen finden Sie unter GRANT.
Der Benutzer, der eine Prozedur erstellt hat, ist standardmäßig der Eigentümer. Der Besitzer hat standardmäßig CREATEDROP, und EXECUTE Rechte für die Prozedur. Superuser verfügen über alle Berechtigungen.
Das SECURITY Attribut steuert die Zugriffsrechte einer Prozedur auf Datenbankobjekte. Wenn Sie eine gespeicherte Prozedur erstellen, können Sie das SECURITY Attribut entweder auf DEFINER oder setzenINVOKER. Wenn Sie angeben SECURITYINVOKER, verwendet die Prozedur die Rechte des Benutzers, der die Prozedur aufruft. Wenn Sie angeben SECURITYDEFINER, verwendet die Prozedur die Rechte des Eigentümers der Prozedur. INVOKERist die Standardeinstellung.
Da eine SECURITY DEFINER Prozedur mit den Rechten des Benutzers ausgeführt wird, dem sie gehört, müssen Sie sicherstellen, dass die Prozedur nicht missbraucht werden kann. Gehen Sie wie folgt vor, um sicherzustellen, dass SECURITY DEFINER Prozeduren nicht missbraucht werden können:
Erteilen EXECUTE Sie bestimmte SECURITY DEFINER Verfahren nur bestimmten Benutzern und nicht PUBLIC
Qualifizieren Sie alle Datenbankobjekte, auf die die Prozedur zugreifen muss, mit Schema-Namen. Verwenden Sie z. B.
myschema.mytable
anstatt nurmytable
zu verwenden.Wenn Sie einen Objektnamen nicht anhand seines Schemas qualifizieren können, legen Sie dies
search_path
bei der Erstellung der Prozedur mithilfe der SET Option fest. Legen Siesearch_path
fest, um alle Schemata auszuschließen, die von nicht vertrauenswürdigen Benutzern beschreibbar sind. Dieser Ansatz verhindert, dass Aufrufer dieser Prozedur Objekte (z. B. Tabellen oder Ansichten) anlegen, die Objekte maskieren, die für die Verwendung durch die Prozedur vorgesehen sind. Weitere Hinweise zu dieser SET Option finden Sie unterCREATE PROCEDURE.
Das folgende Beispiel legt search_path
auf admin
fest, um zu gewährleisten, dass auf die user_creds
-Tabelle über das admin
-Schema zugegriffen werden kann und nicht aus der Öffentlichkeit oder über irgendein anderes Schema im search_path
des Aufrufers.
CREATE OR REPLACE PROCEDURE sp_get_credentials(userid int, o_creds OUT varchar) AS $$ BEGIN SELECT creds INTO o_creds FROM user_creds WHERE user_id = $1; END; $$ LANGUAGE plpgsql SECURITY DEFINER -- Set a secure search_path SET search_path = admin;