Delen via


Beveiliging op rijniveau implementeren met sessiecontext in Data API Builder

Gebruik de functie sessiecontext van SQL om beveiliging op rijniveau te implementeren in data-API builder.

Vereisten

SQL-tabel en -gegevens Creatie

Creatie een tabel met fictieve gegevens die u in dit voorbeeldscenario kunt gebruiken.

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

  2. Creatie een tabel met de naam Revenues , idcategory, revenueen username kolommen.

    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 rijen met voorbeeldboeken 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 de 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. Creatie 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 DAB-hulpprogramma (Data API Builder) uit om een configuratiebestand en één entiteit te genereren.

  1. Creatie een nieuwe configuratie terwijl u deze instelt --set-session-context op 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 voor de dbo.Revenues tabel.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Start het hulpprogramma Data API Builder.

    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 de client of het hulpprogramma van uw voorkeur.

  2. Voer de sp_set_session_context 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;