Dela via


Implementera säkerhet på radnivå med sessionskontext i Data API Builder

Använd sessionskontextfunktionen i SQL för att implementera säkerhet på radnivå i Data API Builder.

Förutsättningar

  • Befintlig SQL-server och databas.
  • Data-API-byggarens CLI. Installera CLI

Skapa SQL-tabell och -data

Skapa en tabell med fiktiva data som ska användas i det här exempelscenariot.

  1. Anslut till SQL-databasen med den klient eller det verktyg du föredrar.

  2. Skapa en tabell med namnet Revenues med idkolumnerna , category, revenueoch username .

    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. Infoga fyra exempelboksrader i Revenues tabellen.

    INSERT INTO dbo.Revenues VALUES
        (1, 'Book', 5000, 'Oscar'),  
        (2, 'Comics', 10000, 'Oscar'),  
        (3, 'Journals', 20000, 'Hannah'),  
        (4, 'Series', 40000, 'Hannah')
    GO
    
  4. Testa dina data med en enkel SELECT * fråga.

    SELECT * FROM dbo.Revenues
    
  5. Skapa en funktion med namnet RevenuesPredicate. Den här funktionen filtrerar resultat baserat på den aktuella sessionskontexten.

    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. Skapa en säkerhetsprincip med namnet RevenuesSecurityPolicy med funktionen .

    CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy
    ADD FILTER PREDICATE dbo.RevenuesPredicate(username)
    ON dbo.Revenues;
    

Kör verktyget

Kör verktyget Data API Builder (DAB) för att generera en konfigurationsfil och en enda entitet.

  1. Skapa en ny konfiguration genom att ställa in --set-session-context till true.

    dab init \
        --database-type mssql \
        --connection-string "<sql-connection-string>" \
        --set-session-context true
    
  2. Lägg till en ny entitet med namnet revenue för dbo.Revenues tabellen.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Starta verktyget Data API Builder.

    dab start
    
  4. Navigera till http://localhost:5000/api/revenue slutpunkten. Observera att inga data returneras. Det här beteendet beror på att sessionskontexten inte har angetts och inga poster matchar filterpredikatet.

Testa i SQL

Testa filtret och predikatet i SQL direkt för att säkerställa att det fungerar.

  1. Anslut till SQL-servern igen med den klient eller det verktyg du föredrar.

  2. Kör sp_set_session_context för att manuellt ange sessionskontextens name krav till det statiska värdet Oscar.

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. Kör en typisk SELECT * fråga. Observera att resultaten filtreras automatiskt med hjälp av predikatet.

    SELECT * FROM dbo.Revenues;