Freigeben über


Signieren gespeicherter Prozeduren in SQL Server (ADO.NET)

Aktualisiert: November 2007

Seit SQL Server 2005 können Sie gespeicherte Prozeduren mit einem Zertifikat oder einem asymmetrischen Schlüssel signieren. Gedacht ist dies für Szenarios, in denen Berechtigungen nicht über die Besitzverkettung geerbt werden können oder in denen die Besitzkette unterbrochen ist, wie bei dynamischem SQL. In einem solchen Fall erstellen Sie einen Benutzer, der dem Zertifikat zugeordnet wird, wodurch ihm Berechtigungen für die Objekte gewährt werden, auf die die gespeicherte Prozedur zugreifen können muss.

Bei der Ausführung der gespeicherten Prozedur kombiniert SQL Server die Berechtigungen des Zertifikatsbenutzers mit den Berechtigungen des Aufrufers. Im Gegensatz zur EXECUTE AS-Klausel ändert sich der Ausführungskontext der Prozedur nicht. Integrierte Funktionen, die Anmelde- und Benutzernamen zurückgeben, geben den Namen des Aufrufers, und nicht den Namen des Zertifikatsbenutzers zurück.

Eine digitale Signatur ist ein mit dem privaten Schlüssel des Signaturgebers verschlüsselter Datendigest. Der private Schlüssel stellt sicher, dass die digitale Signatur für den Träger oder Besitzer eindeutig ist. Signiert werden können gespeicherte Prozeduren, Funktionen oder Trigger.

Hinweis:

Sie können in der Masterdatenbank ein Zertifikat zum Gewähren von Berechtigungen auf Serverebene erstellen.

Erstellen von Zertifikaten

Beim Signieren einer gespeicherten Prozedur mit einem Zertifikat wird mithilfe des privaten Schlüssels ein Datendigest erstellt, der aus dem verschlüsselten Hash der gespeicherten Prozedur besteht. Zur Laufzeit wird der Datendigest mit dem öffentlichen Schlüssel entschlüsselt und mit dem Hashwert der gespeicherten Prozedur verglichen. Wenn die gespeicherte Prozedur geändert wird, wird der Hashwert ungültig, sodass die digitale Signatur nicht mehr übereinstimmt. Auf diese Weise wird verhindert, dass der Code der gespeicherten Prozedur durch einen Benutzer geändert wird, der keine Zugriffsberechtigung für den privaten Schlüssel besitzt. Daher muss die Prozedur nach jeder Änderung neu signiert werden.

Zum Signieren eines Moduls sind die folgenden vier Schritte auszuführen:

  1. Erstellen Sie mit der Transact-SQL-CREATE CERTIFICATE [certificateName]-Anweisung ein Zertifikat. Diese Anweisung verfügt über mehrere Optionen, mit denen das Start- und Enddatum und ein Kennwort festgelegt werden können. Die Standardgültigkeitsdauer beträgt ein Jahr.

  2. Erstellen Sie mit der Transact-SQL-CREATE USER [userName] FROM CERTIFICATE [certificateName]-Anweisung einen mit diesem Zertifikat verknüpften Datenbankbenutzer. Dieser Benutzer ist nur in der Datenbank vorhanden, und er wird keiner Anmeldung zugeordnet.

  3. Gewähren Sie dem Zertifikatsbenutzer die erforderlichen Berechtigungen für die Datenbankobjekte.

Hinweis:

Ein Zertifikat kann keine Berechtigungen für Benutzer gewähren, die Berechtigungen hatten, die mit der DENY-Anweisung widerrufen wurden. DENY hat immer Vorrang gegenüber GRANT und verhindert, dass der Aufrufer Berechtigungen erben kann, die dem Zertifikatsbenutzer gewährt wurden.

  1. Signieren Sie die Prozedur mit dem Zertifikat. Verwenden Sie dazu die Transact-SQL-ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName]-Anweisung.

Externe Ressourcen

Weitere Informationen finden Sie in den folgenden Ressourcen:

Ressource

Beschreibung

Modulsignierung in der SQL Server 2008-Onlinedokumentation

Beschreibt die Modulsignierung und enthält ein Beispielszenario sowie Links zu den relevanten Transact-SQL-Themen.

Modulsignierung in der SQL Server 2005-Onlinedokumentation

Beschreibt die Modulsignierung und enthält ein Beispielszenario sowie Links zu den relevanten Transact-SQL-Themen.

Signieren von gespeicherten Prozeduren mit einem Zertifikat in der SQL Server 2005-Onlinedokumentation

Enthält ein Lernprogramm zum Signieren einer gespeicherten Prozedur mit einem Zertifikat.

Siehe auch

Konzepte

Anwendungssicherheitsszenarien in SQL Server (ADO.NET)

Verwalten von Berechtigungen mit gespeicherten Prozeduren in SQL Server (ADO.NET)

Schreiben von sicherem dynamischen SQL in SQL Server (ADO.NET)

Anpassen von Berechtigungen mit Identitätswechsel in SQL Server (ADO.NET)

Ändern von Daten mit gespeicherten Prozeduren (ADO.NET)

Weitere Ressourcen

Sichern von ADO.NET-Anwendungen

Übersicht über die SQL Server-Sicherheit (ADO.NET)