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
- Existující sql server a databáze
- Rozhraní příkazového řádku tvůrce datového rozhraní API. Instalace rozhraní příkazového řádku
- Databázový klient (SQL Server Management Studio, Azure Data Studio atd.)
- Pokud nemáte nainstalovaného klienta, nainstalujte Azure Data Studio.
Create dat a tabulek SQL
Create tabulku s fiktivními daty pro použití v tomto ukázkovém scénáři.
Připojte se k databázi SQL pomocí preferovaného klienta nebo nástroje.
Create tabulku se
Revenues
id
sloupci ,category
,revenue
ausername
.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
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
Otestujte data pomocí jednoduchého
SELECT *
dotazu.SELECT * FROM dbo.Revenues
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));
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.
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
Přidejte pro tabulku novou entitu
revenue
dbo.Revenues
.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Spusťte nástroj Tvůrce rozhraní Data API.
dab start
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.
Znovu se připojte k SQL Serveru pomocí preferovaného klienta nebo nástroje.
Spuštěním
sp_set_session_context
příkazu ručně nastavte deklaraci identity kontextuname
relace na statickou hodnotuOscar
.EXEC sp_set_session_context 'name', 'Oscar';
Spusťte typický
SELECT *
dotaz. Všimněte si, že výsledky se automaticky filtrují pomocí predikátu.SELECT * FROM dbo.Revenues;