Freigeben über


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

Create SQL-Tabelle und -Daten

Create eine Tabelle mit fiktiven Daten, die in diesem Beispielszenario verwendet werden sollen.

  1. Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools eine Verbindung mit der SQL-Datenbank her.

  2. Create eine Tabelle mit den Revenues Spalten , category, revenueund username 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
    
  3. 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
    
  4. Testen Sie Ihre Daten mit einer einfachen SELECT * Abfrage.

    SELECT * FROM dbo.Revenues
    
  5. 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));
    
  6. 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.

  1. 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
    
  2. Fügen Sie eine neue Entität mit dem Namen revenue für die dbo.Revenues Tabelle hinzu.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Starten Sie das Daten-API-Generatortool.

    dab start
    
  4. 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.

  1. Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools erneut eine Verbindung mit dem SQL Server her.

  2. Führen Sie den aus, um den sp_set_session_context Anspruch Ihres Sitzungskontexts name manuell auf den statischen Wert Oscarfestzulegen.

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. Führen Sie eine typische SELECT * Abfrage aus. Beachten Sie, dass die Ergebnisse mithilfe des Prädikats automatisch gefiltert werden.

    SELECT * FROM dbo.Revenues;