Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
K implementaci zabezpečení na úrovni řádků v Tvůrci rozhraní Data API použijte funkci kontextu relace SQL.
Požadavky
- Existující sql server a databáze.
- Rozhraní příkazového řádku pro tvorbu API dat. Instalace rozhraní příkazového řádku
Vytvoření tabulky a dat SQL
Vytvořte tabulku s fiktivními daty, která se mají použít v tomto ukázkovém scénáři.
Připojte se k databázi SQL pomocí preferovaného klienta nebo nástroje.
Vytvořte tabulku pojmenovanou
Revenuesse sloupciid,category,revenueaaccessible_role.DROP TABLE IF EXISTS dbo.Revenues; CREATE TABLE dbo.Revenues( id int PRIMARY KEY, category varchar(max) NOT NULL, revenue int, accessible_role varchar(max) NOT NULL ); GOVložte do
Revenuestabulky čtyři ukázkové řádky.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GOV tomto příkladu
accessible_rolesloupec ukládá název role, který má přístup k řádku.Otestujte data pomocí jednoduchého
SELECT *dotazu.SELECT * FROM dbo.RevenuesVytvořte funkci s názvem
RevenuesPredicate. Tato funkce bude filtrovat výsledky na základě aktuálního kontextu relace.CREATE FUNCTION dbo.RevenuesPredicate(@accessible_role varchar(max)) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS fn_securitypredicate_result WHERE @accessible_role = CAST(SESSION_CONTEXT(N'roles') AS varchar(max));Vytvořte zásadu zabezpečení pojmenovanou
RevenuesSecurityPolicypomocí funkce.CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(accessible_role) ON dbo.Revenues;
(Volitelné) Vytvoření uložené procedury
Tato část ukazuje jednoduchý vzor "hello world" pro použití hodnot kontextu relace přímo v T-SQL.
Vytvořte uloženou proceduru
roles, která čte kontextovou hodnotu relace a používá ji k filtrování výsledků.CREATE OR ALTER PROCEDURE dbo.GetRevenuesForCurrentRole AS BEGIN SET NOCOUNT ON; DECLARE @role varchar(max) = CAST(SESSION_CONTEXT(N'roles') AS varchar(max)); SELECT id, category, revenue, accessible_role FROM dbo.Revenues WHERE accessible_role = @role; END GO
Spustit nástroj
Spuštěním nástroje Data API Builder (DAB) vygenerujte konfigurační soubor a jednu entitu.
Vytvořte novou konfiguraci při nastavení
--set-session-contextna hodnotu true.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true \ --auth.provider SimulatorPokud je pro SQL Server povolený kontext relace, tvůrce rozhraní DATA API odesílá ověřené deklarace identity uživatelů do SQL voláním
sp_set_session_context(napříkladroles). Povolení kontextu relace také zakáže ukládání odpovědí do mezipaměti pro tento zdroj dat.Přidejte novou entitu pojmenovanou
revenuedbo.Revenuespro tabulku.dab add revenue \ --source "dbo.Revenues" \ --permissions "Authenticated:read"Spusťte nástroj Tvůrce rozhraní Data API.
dab startDotazujte se na koncový bod bez zadání efektivní role. Všimněte si, že se nevrací žádná data, protože aktuální role je ve výchozím nastavení
Authenticated.curl http://localhost:5000/api/revenueDotazování koncového bodu při nastavování efektivní role na
Oscar. Všimněte si, že filtrované výsledky obsahují pouzeOscarřádky.curl -H "X-MS-API-ROLE: Oscar" http://localhost:5000/api/revenueZopakujte použití role
Hannah.curl -H "X-MS-API-ROLE: Hannah" http://localhost:5000/api/revenue
Testování v SQL
Otestujte filtr a predikát v SQL přímo, abyste měli jistotu, že funguje.
Znovu se připojte k SQL Serveru pomocí preferovaného klienta nebo nástroje.
Spusťte příkaz
sp_set_session_contextk ručnímu nastavení deklarace identity kontexturolesrelace na statickou hodnotuOscar.EXEC sp_set_session_context 'roles', 'Oscar';Spusťte typický
SELECT *dotaz. Všimněte si, že výsledky se automaticky filtrují pomocí predikátu.SELECT * FROM dbo.Revenues;(Volitelné) Dotazování tabulky pomocí uložené procedury
EXEC dbo.GetRevenuesForCurrentRole;