Udostępnij przez


Implementowanie zabezpieczeń na poziomie wiersza z kontekstem sesji w 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

  • Istniejący serwer SQL i baza danych.
  • Kreator interfejsu wiersza polecenia do API danych. Zainstaluj CLI

Tworzenie tabeli i danych SQL

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

  1. Nawiąż połączenie z bazą danych SQL przy użyciu preferowanego klienta lub narzędzia.

  2. Utwórz 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 tabeli cztery przykładowe wiersze Revenues 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. Utwórz funkcję 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. Utwórz 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 jedną jednostkę.

  1. Utwórz nową konfigurację przez ustawienie --set-session-context na prawdę.

    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 programie 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 sp_set_session_context, aby ręcznie ustawić żądanie kontekstu sesji name na statyczną wartość Oscar.

    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;