Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie das Sitzungskontextfeature von SQL, um die Sicherheit auf Zeilenebene im Daten-API-Generator zu implementieren.
Voraussetzungen
- Vorhandener SQL-Server und -Datenbank.
- CLI des Daten-API-Erstellers. Installieren der CLI
Erstellen einer SQL-Tabelle und -Daten
Erstellen Sie 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.
Erstellen Sie eine Tabelle mit dem Namen
Revenuesund den Spaltenid,category,revenueundusername.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 ); GOFügen Sie vier Beispielbuchzeilen in die
RevenuesTabelle ein.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GOTesten Sie Ihre Daten mit einer einfachen
SELECT *Abfrage.SELECT * FROM dbo.RevenuesErstellen Sie eine Funktion mit dem Namen
RevenuesPredicate. Diese Funktion filtert 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));Erstellen Sie eine Sicherheitsrichtlinie mit dem Namen
RevenuesSecurityPolicyunter Verwendung der Funktion.CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Ausführen des Tools
Führen Sie das DaB-Tool (Data API Builder) aus, um eine Konfigurationsdatei und eine einzelne Entität zu generieren.
Erstellen Sie eine neue Konfiguration und setzen Sie
--set-session-contextauf "true".dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context trueFügen Sie eine neue Entität mit dem Namen
revenuefür die Tabelledbo.Revenueshinzu.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"Starten Sie das Daten-API-Generator-Tool.
dab startNavigieren Sie zum
http://localhost:5000/api/revenueEndpunkt. Beachten Sie, dass keine Daten zurückgegeben werden. Dieses Verhalten tritt auf, da 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 in SQL direkt, um sicherzustellen, dass er funktioniert.
Stellen Sie erneut eine Verbindung mit dem SQL-Server her, indem Sie ihren bevorzugten Client oder Ihr bevorzugtes Tool verwenden.
Führen Sie
sp_set_session_contextaus, um den Anspruch des Sitzungskontextsnamemanuell auf den statischen WertOscarfestzulegen.EXEC sp_set_session_context 'name', 'Oscar';Führen Sie eine typische
SELECT *Abfrage aus. Beachten Sie, dass die Ergebnisse automatisch mithilfe des Prädikats gefiltert werden.SELECT * FROM dbo.Revenues;