Freigeben über


Sicherheit auf Spaltenebene

Mit Sicherheit auf Spaltenebene können Kunden den Zugriff auf Tabellenspalten basierend auf dem Ausführungskontext oder der Gruppenmitgliedschaft des Benutzers steuern.

Sicherheit auf Spaltenebene vereinfacht das Entwerfen und Programmieren der Sicherheit in Ihrer Anwendung, indem Sie den Spaltenzugriff einschränken können, um vertrauliche Daten zu schützen. Zum Beispiel können Sie so sicherstellen, dass bestimmte Benutzer nur auf bestimmte Spalten einer Tabelle zugreifen können, die für ihre Abteilung relevant sind. Die Datenbeschränkungszugriffslogik befindet sich auf der Datenbankebene, statt fern der Daten auf einer anderen Anwendungsebene. Die Datenbank wendet die Zugriffsbeschränkungen jedes Mal an, wenn ein Datenzugriff von einer beliebigen Ebene aus versucht wird. Dadurch bietet Ihr gesamtes Sicherheitssystem eine geringere Angriffsfläche und ist zuverlässiger und robuster. Darüber hinaus entfällt dank Sicherheit auf Spaltenebene die Notwendigkeit, Sichten zum Herausfiltern von Spalten einzuführen, um den Benutzern Zugriffsbeschränkungen aufzuerlegen.

Sie können Sicherheit auf Spaltenebene mit der unter GRANT (Objektberechtigungen) (Transact-SQL) beschriebenen T-SQL-Syntax implementieren. Mit diesem Mechanismus wird sowohl die SQL-Authentifizierung als auch die Microsoft Entra-ID-Authentifizierung (ehemals Azure Active Directory) unterstützt.

Bei Bedarf haben Sie auch die Möglichkeit, Sicherheit auf Zeilenebene für Tabellen basierend auf einem WHERE-Klauselfilter zu erzwingen.

Diagramm einer schematische Tabelle, bei der die erste Spalte ein geschlossenes Vorhängeschloss und orangefarbene Zellen aufweist, während die Zellen in den anderen Spalten weiß sind

Syntax

Die Syntax der GRANT-Anweisung für Objektberechtigungen ermöglicht das Erteilen von Berechtigungen für durch Trennzeichen getrennte Spaltenlisten in einer Tabelle.

GRANT <permission> [ ,...n ] ON
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
    TO <database_principal> [ ,...n ]
    [ WITH GRANT OPTION ]
    [ AS <database_principal> ]
<permission> ::=
    SELECT
  | UPDATE
<database_principal> ::=
      Database_user
    | Database_role
    | Database_user_mapped_to_Windows_User
    | Database_user_mapped_to_Windows_Group

Beispiele

Im folgenden Beispiel wird erläutert, wie der Zugriff von TestUser auf die Spalte SSN in der Tabelle Membership eingeschränkt wird:

Erstellen Sie die Tabelle Membership mit einer Spalte namens SSN, um Sozialversicherungsnummern zu speichern:

CREATE TABLE Membership
  (MemberID int IDENTITY,
   FirstName varchar(100) NULL,
   SSN char(9) NOT NULL,
   LastName varchar(100) NOT NULL,
   Phone varchar(12) NULL,
   Email varchar(100) NULL);

Gestatten Sie TestUser den Zugriff auf alle Spalten außer auf die Spalte SSN, die die vertraulichen Daten enthält:

GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;

Abfragen, die als TestUser ausgeführt werden, sind nicht erfolgreich, wenn sie die Spalte SSN enthalten:

SELECT * FROM Membership;

In diesem Fall tritt folgender Fehler auf:

Msg 230, Level 14, State 1, Line 12
The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.

Anwendungsfälle

Im Folgenden finden Sie einige Beispiele für aktuelle Anwendungsfälle der Sicherheit auf Spaltenebene:

  • Ein Finanzdienstleistungsunternehmen erlaubt nur Kundenbetreuern den Zugriff auf Sozialversicherungsnummern (SSN), Telefonnummern und andere personenbezogene Daten (PII).
  • Ein Gesundheitsdienstleister erlaubt nur Ärzten und Krankenschwestern den Zugriff auf vertrauliche Krankenakten, Mitglieder der Abrechnungsabteilung können diese Daten jedoch nicht einsehen.

Nächste Schritte