Sdílet prostřednictvím


Implementace zabezpečení na úrovni řádků s kontextem relace v Tvůrci rozhraní Data API

Pomocí funkce kontextu relace SQL implementujte zabezpečení na úrovni řádků v Tvůrci rozhraní Data API.

Požadavky

Create dat a tabulek SQL

Create tabulku s fiktivními daty pro použití v tomto ukázkovém scénáři.

  1. Připojte se k databázi SQL pomocí preferovaného klienta nebo nástroje.

  2. Create tabulku se Revenuesidsloupci , category, revenuea 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. Vložte do tabulky čtyři řádky s ukázkou Revenues knihy.

    INSERT INTO dbo.Revenues VALUES
        (1, 'Book', 5000, 'Oscar'),  
        (2, 'Comics', 10000, 'Oscar'),  
        (3, 'Journals', 20000, 'Hannah'),  
        (4, 'Series', 40000, 'Hannah')
    GO
    
  4. Otestujte data pomocí jednoduchého SELECT * dotazu.

    SELECT * FROM dbo.Revenues
    
  5. Create funkci s názvem RevenuesPredicate. Tato funkce bude filtrovat výsledky na základě kontextu aktuální relace.

    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 pomocí funkce zásady zabezpečení s názvem RevenuesSecurityPolicy .

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

Spustit nástroj

Spuštěním nástroje Data API Builder (DAB) vygenerujte konfigurační soubor a jednu entitu.

  1. Create novou konfiguraci a současně na hodnotu --set-session-context true.

    dab init \
        --database-type mssql \
        --connection-string "<sql-connection-string>" \
        --set-session-context true
    
  2. Přidejte pro tabulku novou entitu revenuedbo.Revenues .

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Spusťte nástroj Tvůrce rozhraní Data API.

    dab start
    
  4. Přejděte ke koncovému http://localhost:5000/api/revenue bodu. Všimněte si, že se nevrátí žádná data. K tomuto chování dochází, protože kontext relace není nastavený a žádné záznamy neodpovídají predikátu filtru.

Testování v SQL

Otestujte filtr a predikát přímo v SQL, abyste se ujistili, že funguje.

  1. Znovu se připojte k SQL Serveru pomocí preferovaného klienta nebo nástroje.

  2. Spuštěním sp_set_session_context příkazu ručně nastavte deklaraci identity kontextu name relace na statickou hodnotu Oscar.

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. Spusťte typický SELECT * dotaz. Všimněte si, že výsledky se automaticky filtrují pomocí predikátu.

    SELECT * FROM dbo.Revenues;