Freigeben über


Gewähren zeilenspezifischer Berechtigungen in SQL Server (ADO.NET)

Aktualisiert: November 2007

Es gibt Szenarios, in denen der Zugriff genauer gesteuert werden muss, als dies durch einfaches Gewähren, Widerrufen oder Ablehnen von Berechtigungen für Daten möglich ist. Stellen Sie sich z. B. eine Datenbankanwendung in einem Krankenhaus vor, in der die Patienteninformationen in einer einzigen Tabelle gespeichert werden. Die Krankenhausärzte sollten aber immer nur auf Informationen zugreifen können, die sich auf ihre eigenen Patienten beziehen. Ähnliche Szenarios gibt es in vielen Umgebungen, vom Finanzwesen über die Justiz und die Behörden bis hin zum militärischen Bereich. SQL Server bietet aber keine Unterstützung für die Implementierung zeilenbasierter Sicherheit. Sie müssen daher in Ihren Tabellen zusätzliche Spalten erstellen, um Zeilenfiltermechanismen zu definieren.

Implementieren zeilenbasierter Berechtigungen

Zeilenbasierte Berechtigungen werden in Anwendungen verwendet, die Informationen in einer einzigen Tabelle speichern. Jede Zeile besitzt eine Spalte, die ein Unterscheidungsmerkmal (Differenzierungsparameter) definiert, z. B. den Benutzernamen, die Menge oder ein anderes Identifizierungsmerkmal. Sie erstellen dann parametrisierte gespeicherte Prozeduren, die den entsprechenden Wert übergeben. Benutzer können nur die Zeilen sehen, die zum bereitgestellten Wert passen.

Die folgenden Schritte beschreiben, wie zeilenbasierte Berechtigungen auf der Grundlage eines Benutzer- oder Anmeldenamens konfiguriert werden können.

  • Erstellen Sie die Tabelle, und fügen Sie eine weitere Spalte zum Speichern des Namens hinzu.

  • Erstellen Sie auf der Grundlage der Spalte mit dem Benutzernamen eine Ansicht mit einer WHERE-Klausel. Auf diese Weise werden nur die Zeilen mit dem angegebenen Wert zurückgegeben. Verwenden Sie eine der integrierten Funktionen zum Angeben eines Datenbankbenutzers oder eines Anmeldenamens. So vermeiden Sie, für jeden Benutzer eine andere Ansicht erstellen zu müssen.

    ' Returns the login identification name of the user.
    WHERE UserName = SUSER_SNAME()

    ' USER_NAME or CURRENT_USER Return the database user name.
    WHERE UserName = CURRENT_USER()
  • Verwenden Sie als Grundlage für die Erstellung gespeicherter Prozeduren zum Auswählen, Einfügen, Aktualisieren und Löschen von Daten die Ansicht, nicht die Basistabellen. Die Ansicht stellt einen Filter zum Einschränken der zurückgegebenen oder geänderten Zeilen bereit.

  • Erfassen Sie bei gespeicherten Prozeduren, die Daten einfügen, den Benutzernamen mit der in der WHERE-Klausel der Ansicht angegebenen Funktion, und fügen Sie diesen Wert in die Spalte UserName ein.

  • Verweigern Sie der Rolle public alle Berechtigungen für die Tabellen und Ansichten. Die Benutzer können keine Berechtigungen aus anderen Datenbankrollen erben, weil die WHERE-Klausel nicht auf Rollen, sondern auf Benutzer- oder Anmeldenamen basiert.

  • Gewähren Sie den Datenbankrollen die Berechtigung EXECUTE für die gespeicherten Prozeduren. Die Benutzer können nur auf Daten zugreifen, die über die gespeicherten Prozeduren bereitgestellt werden.

Externe Ressourcen

Weitere Informationen finden Sie in der folgenden Ressource:

Implementing Row- and Cell-Level Security in Classified Databases Using SQL Server 2005 auf der SQL Server TechCenter-Website.

Beschreibt, wie Sie mithilfe von zeilen- und zellenbasierter Sicherheit die Sicherheitsanforderungen für klassifizierte Datenbanken erfüllen können.

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)

Weitere Ressourcen

Sichern von ADO.NET-Anwendungen

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