DETAILLIERTE SQL-Berechtigungen in Microsoft Fabric
Gilt für: SQL-Endpunkt und Warehouse in Microsoft Fabric
Wenn die vordefinierten Berechtigungen, die durch die Zuweisung zu Arbeitsbereichsrollen bereitgestellt oder über Elementberechtigungen gewährt werden, nicht ausreichen, stehen Standard-SQL-Konstrukte für eine präzisere Steuerung zur Verfügung.
Für SQL-Endpunkt und Warehouse:
- Die Sicherheit auf Objektebene kann mithilfe der GRANT-, REVOKE- und DENY-Syntax verwaltet werden.
- Benutzer können SQL-Rollen zugewiesen werden, sowohl benutzerdefinierten als auch integrierten Datenbankrollen.
Wichtig
Microsoft Fabric befindet sich derzeit in der Vorschauversion. Diese Informationen beziehen sich auf eine Vorabversion des Produkts, an der vor der Veröffentlichung noch wesentliche Änderungen vorgenommen werden können. Microsoft übernimmt keine Garantie, weder ausdrücklich noch stillschweigend, für die hier bereitgestellten Informationen.
Benutzergranulare Berechtigungen
- Damit ein Benutzer eine Verbindung mit der Datenbank herstellen kann, muss dem Benutzer eine Arbeitsbereichsrolle zugewiesen oder die Berechtigung Lesen zugewiesen werden. Ohne die Leseberechtigung tritt mindestens ein Fehler bei der Verbindung auf.
- Wenn Sie die detaillierten Berechtigungen eines Benutzers einrichten möchten, bevor er eine Verbindung mit dem Warehouse herstellen kann, können Berechtigungen zuerst in SQL eingerichtet werden. Anschließend können sie Zugriff erhalten, indem Sie sie einer Arbeitsbereichsrolle zuweisen oder Elementberechtigungen erteilen.
Einschränkungen
- CREATE USER kann derzeit nicht explizit ausgeführt werden. Wenn GRANT oder DENY ausgeführt wird, wird der Benutzer automatisch erstellt.
- Die Sicherheit auf Zeilenebene wird derzeit nicht unterstützt.
- Die dynamische Datenmaskierung wird derzeit nicht unterstützt.
Meine Berechtigungen anzeigen
Wenn ein Benutzer eine Verbindung mit der SQL-Verbindungszeichenfolge herstellt, kann er die für sie verfügbaren Berechtigungen mithilfe der sys.fn_my_permissions-Funktion anzeigen.
Datenbankbereichsberechtigungen des Benutzers:
SELECT *
FROM sys.fn_my_permissions(NULL, "Database")
Benutzerschemabezogene Berechtigungen:
SELECT *
FROM sys.fn_my_permissions("<schema-name>", "Schema")
Objektbezogene Berechtigungen des Benutzers:
SELECT *
FROM sys.fn_my_permissions("<schema-name>.<object-name>", "Object")
Anzeigen von Berechtigungen, die Benutzern explizit gewährt werden
Wenn eine Verbindung über die SQL-Verbindungszeichenfolge hergestellt wird, kann ein Benutzer mit erhöhten Berechtigungen die Berechtigungen abfragen, die mithilfe von Systemsichten gewährt wurden. Dadurch werden die Benutzer oder Benutzerberechtigungen nicht angezeigt, die Benutzern durch Zuweisung von Arbeitsbereichsrollen oder zugewiesenen Elementberechtigungen erteilt werden.
SELECT DISTINCT pr.principal_id, pr.name, pr.type_desc,
pr.authentication_type_desc, pe.state_desc, pe.permission_name
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe
ON pe.grantee_principal_id = pr.principal_id;
Einschränken des Zeilenzugriffs mithilfe von Ansichten
Die Sicherheit auf Zeilenebene wird derzeit nicht unterstützt. Als Problemumgehung können Ansichten und Systemfunktionen verwendet werden, um den Zugriff eines Benutzers auf die Daten einzuschränken. Dies kann wie folgt erreicht werden:
Stellen Sie dem Benutzer die Berechtigung Fabric Read only zur Verfügung. Dadurch erhalten sie nur CONNECT-Berechtigungen für das Warehouse.
Erstellen Sie optional eine benutzerdefinierte Rolle, und fügen Sie den Benutzer der Rolle hinzu, wenn Sie den Zugriff basierend auf Rollen einschränken möchten.
CREATE ROLE PrivilegedRole ALTER ROLE PrivilegedRole ADD MEMBER [userOne@contoso.com]
Erstellen einer Ansicht, die die Tabelle abfragt, für die Sie den Zeilenzugriff einschränken möchten
Fügen Sie eine WHERE-Klausel in der VIEW-Definition mithilfe der Systemfunktionen SUSER_SNAME() oder IS_ROLEMEMBER() hinzu, um basierend auf dem Benutzernamen oder der Rollenmitgliedschaft zu filtern. Im Folgenden finden Sie ein Beispiel für das Bereitstellen des Zugriffs auf bestimmte Zeilen für Benutzer basierend auf Regionsdaten innerhalb der Zeile. Die erste Bedingung ermöglicht den Zugriff auf Zeilen einer bestimmten Region für einen bestimmten Benutzer, während die zweite Bedingung Zugriff auf Zeilen einer bestimmten Region auf jedes Mitglied der benutzerdefinierten Rolle PrivilegedRole bietet.
CREATE VIEW dbo.RestrictedAccessTable as select * from dbo.SampleTable WHERE ( SUSER_SNAME() = 'userTwo@contoso.com' AND test_region = '<region_one_name>') OR ( IS_ROLEMEMBER('PrivilegedRole', SUSER_SNAME()) = 1 AND test_region = '<region_two_name')
Gewähren Des Zugriffs auf die Ansicht:
GRANT SELECT ON dbo.RestrictedAccessTable TO [userOne@contoso.com]