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
- Istniejący serwer SQL i baza danych.
- Interfejs wiersza polecenia konstruktora interfejsu API danych. Instalowanie interfejsu wiersza polecenia
- Klient bazy danych (SQL Server Management Studio, Azure Data Studio itp.)
- Jeśli nie masz zainstalowanego klienta, zainstaluj program Azure Data Studio
Twórca tabelę SQL i dane
Twórca tabelę z fikcyjnymi danymi do użycia w tym przykładowym scenariuszu.
Połącz się z bazą danych SQL przy użyciu preferowanego klienta lub narzędzia.
Twórca tabelę o nazwie
Revenues
z kolumnamiid
,category
,revenue
iusername
.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
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
Przetestuj dane przy użyciu prostego
SELECT *
zapytania.SELECT * FROM dbo.Revenues
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));
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ę.
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
Dodaj nową jednostkę o nazwie
revenue
dladbo.Revenues
tabeli.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Uruchom narzędzie konstruktora interfejsu API danych.
dab start
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.
Połącz się ponownie z serwerem SQL przy użyciu preferowanego klienta lub narzędzia.
Uruchom polecenie ,
sp_set_session_context
aby ręcznie ustawić oświadczenie kontekstuname
sesji na wartośćOscar
statyczną .EXEC sp_set_session_context 'name', 'Oscar';
Uruchom typowe
SELECT *
zapytanie. Zwróć uwagę, że wyniki są automatycznie filtrowane przy użyciu predykatu.SELECT * FROM dbo.Revenues;