Implementieren von Sicherheit auf Zeilenebene mit Sitzungskontext im Daten-API-Generator
Verwenden Sie das Sitzungskontextfeature von SQL, um Sicherheit auf Zeilenebene im Daten-API-Generator zu implementieren.
Voraussetzungen
- Vorhandene SQL Server und Datenbank.
- Daten-API-Generator CLI. Installieren der Befehlszeilenschnittstelle
- Ein Datenbankclient (SQL Server Management Studio, Azure Data Studio usw.)
- Wenn Sie keinen Client installiert haben, installieren Sie Azure Data Studio.
Create SQL-Tabelle und -Daten
Create eine Tabelle mit fiktiven Daten, die in diesem Beispielszenario verwendet werden sollen.
Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools eine Verbindung mit der SQL-Datenbank her.
Create eine Tabelle mit den
Revenues
Spalten ,category
,revenue
undusername
aus.id
DROP TABLE IF EXISTS dbo.Revenues; CREATE TABLE dbo.Revenues( id int PRIMARY KEY, category varchar(max) NOT NULL, revenue int, username varchar(max) NOT NULL ); GO
Fügen Sie vier Beispielbuchzeilen in die
Revenues
Tabelle ein.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO
Testen Sie Ihre Daten mit einer einfachen
SELECT *
Abfrage.SELECT * FROM dbo.Revenues
Erstellen Sie eine Funktion mit dem Namen
RevenuesPredicate
. Diese Funktion filtert die Ergebnisse basierend auf dem aktuellen Sitzungskontext.CREATE FUNCTION dbo.RevenuesPredicate(@username varchar(max)) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS fn_securitypredicate_result WHERE @username = CAST(SESSION_CONTEXT(N'name') AS varchar(max));
Create eine Sicherheitsrichtlinie mit dem Namen
RevenuesSecurityPolicy
mithilfe der Funktion.CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Tool ausführen
Führen Sie das DAB-Tool (Data API Builder) aus, um eine Konfigurationsdatei und eine einzelne Entität zu generieren.
Create eine neue Konfiguration, während sie auf true festgelegt
--set-session-context
ist.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true
Fügen Sie eine neue Entität mit dem Namen
revenue
für diedbo.Revenues
Tabelle hinzu.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Starten Sie das Daten-API-Generatortool.
dab start
Navigieren Sie zum
http://localhost:5000/api/revenue
Endpunkt. Beachten Sie, dass keine Daten zurückgegeben werden. Dieses Verhalten tritt auf, weil der Sitzungskontext nicht festgelegt ist und keine Datensätze mit dem Filter-Prädikat übereinstimmen.
Testen in SQL
Testen Sie den Filter und das Prädikat direkt in SQL, um sicherzustellen, dass es funktioniert.
Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools erneut eine Verbindung mit dem SQL Server her.
Führen Sie den aus, um den
sp_set_session_context
Anspruch Ihres Sitzungskontextsname
manuell auf den statischen WertOscar
festzulegen.EXEC sp_set_session_context 'name', 'Oscar';
Führen Sie eine typische
SELECT *
Abfrage aus. Beachten Sie, dass die Ergebnisse mithilfe des Prädikats automatisch gefiltert werden.SELECT * FROM dbo.Revenues;