Delen via


Beveiliging op rijniveau implementeren met sessiecontext in Data API Builder

Gebruik de sessiecontextfunctie van SQL om beveiliging op rijniveau te implementeren in Data API Builder.

Vereiste voorwaarden

SQL-tabel en -gegevens maken

Maak een tabel met fictieve gegevens die in dit voorbeeldscenario moeten worden gebruikt.

  1. Maak verbinding met de SQL-database met behulp van uw favoriete client of hulpprogramma.

  2. Maak een tabel genaamd Revenues met de kolommen id, category, revenue, en 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. Voeg vier voorbeeldboekrijen in de Revenues tabel in.

    INSERT INTO dbo.Revenues VALUES
        (1, 'Book', 5000, 'Oscar'),  
        (2, 'Comics', 10000, 'Oscar'),  
        (3, 'Journals', 20000, 'Hannah'),  
        (4, 'Series', 40000, 'Hannah')
    GO
    
  4. Test uw gegevens met een eenvoudige SELECT * query.

    SELECT * FROM dbo.Revenues
    
  5. Maak een functie met de naam RevenuesPredicate. Met deze functie worden resultaten gefilterd op basis van de huidige sessiecontext.

    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. Maak een beveiligingsbeleid met de naam RevenuesSecurityPolicy met behulp van de functie.

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

Hulpprogramma uitvoeren

Voer het hulpprogramma Data API Builder (DAB) uit om een configuratiebestand en één entiteit te genereren.

  1. Maak een nieuwe configuratie en stel deze in op --set-session-context true.

    dab init \
        --database-type mssql \
        --connection-string "<sql-connection-string>" \
        --set-session-context true
    
  2. Voeg een nieuwe entiteit toe met de naam revenue van de dbo.Revenues tabel.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Start het hulpprogramma voor het maken van data-API's.

    dab start
    
  4. Navigeer naar het http://localhost:5000/api/revenue eindpunt. U ziet dat er geen gegevens worden geretourneerd. Dit gedrag treedt op omdat de sessiecontext niet is ingesteld en er geen records overeenkomen met het filterpredicaat.

Testen in SQL

Test het filter en predicaat rechtstreeks in SQL om te controleren of het werkt.

  1. Maak opnieuw verbinding met de SQL-server met behulp van uw favoriete client of hulpprogramma.

  2. Voer de sp_set_session_context opdracht uit om de claim van name uw sessiecontext handmatig in te stellen op de statische waarde Oscar.

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. Voer een typische SELECT * query uit. U ziet dat de resultaten automatisch worden gefilterd met behulp van het predicaat.

    SELECT * FROM dbo.Revenues;