Udostępnij za pośrednictwem


Implementowanie zabezpieczeń na poziomie wiersza z kontekstem sesji w narzędziu Data API Builder

Użyj funkcji kontekstu sesji języka SQL, aby zaimplementować zabezpieczenia na poziomie wiersza w narzędziu Data API Builder.

Wymagania wstępne

Twórca tabelę SQL i dane

Twórca tabelę z fikcyjnymi danymi do użycia w tym przykładowym scenariuszu.

  1. Połącz się z bazą danych SQL przy użyciu preferowanego klienta lub narzędzia.

  2. Twórca tabelę o nazwie Revenues z kolumnami id, category, revenuei 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. Wstaw do Revenues tabeli cztery przykładowe wiersze książki.

    INSERT INTO dbo.Revenues VALUES
        (1, 'Book', 5000, 'Oscar'),  
        (2, 'Comics', 10000, 'Oscar'),  
        (3, 'Journals', 20000, 'Hannah'),  
        (4, 'Series', 40000, 'Hannah')
    GO
    
  4. Przetestuj dane przy użyciu prostego SELECT * zapytania.

    SELECT * FROM dbo.Revenues
    
  5. Twórca funkcji o nazwie RevenuesPredicate. Ta funkcja będzie filtrować wyniki na podstawie bieżącego kontekstu sesji.

    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. Twórca zasady zabezpieczeń o nazwie RevenuesSecurityPolicy przy użyciu funkcji .

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

Uruchamianie narzędzia

Uruchom narzędzie konstruktora interfejsu API danych (DAB), aby wygenerować plik konfiguracji i pojedynczą jednostkę.

  1. Twórca nową konfigurację podczas ustawiania wartości --set-session-context true.

    dab init \
        --database-type mssql \
        --connection-string "<sql-connection-string>" \
        --set-session-context true
    
  2. Dodaj nową jednostkę o nazwie revenue dla dbo.Revenues tabeli.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Uruchom narzędzie konstruktora interfejsu API danych.

    dab start
    
  4. Przejdź do punktu końcowego http://localhost:5000/api/revenue . Zwróć uwagę, że żadne dane nie są zwracane. To zachowanie występuje, ponieważ kontekst sesji nie jest ustawiony i żadne rekordy nie są zgodne z predykatem filtru.

Testowanie w języku SQL

Przetestuj filtr i predykat bezpośrednio w języku SQL, aby upewnić się, że działa.

  1. Połącz się ponownie z serwerem SQL przy użyciu preferowanego klienta lub narzędzia.

  2. Uruchom polecenie , sp_set_session_context aby ręcznie ustawić oświadczenie kontekstu name sesji na wartość Oscarstatyczną .

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. Uruchom typowe SELECT * zapytanie. Zwróć uwagę, że wyniki są automatycznie filtrowane przy użyciu predykatu.

    SELECT * FROM dbo.Revenues;