Implementera säkerhet på radnivå med sessionskontext i Data API Builder
Använd sessionskontextfunktionen i SQL för att implementera säkerhet på radnivå i Data API Builder.
Förutsättningar
- Befintlig SQL-server och databas.
- Cli för data-API-byggare. Installera CLI
- En databasklient (SQL Server Management Studio, Azure Data Studio osv.)
- Om du inte har en klient installerad installerar du Azure Data Studio
Skapa SQL-tabell och data
Skapa en tabell med fiktiva data som ska användas i det här exempelscenariot.
Anslut till SQL-databasen med den klient eller det verktyg du föredrar.
Skapa en tabell med
id
namnetRevenues
,category
,revenue
ochusername
kolumner.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
Infoga fyra exempelboksrader i
Revenues
tabellen.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO
Testa dina data med en enkel
SELECT *
fråga.SELECT * FROM dbo.Revenues
Skapa en funktion med namnet
RevenuesPredicate
. Den här funktionen filtrerar resultat baserat på den aktuella sessionskontexten.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));
Skapa en säkerhetsprincip med namnet
RevenuesSecurityPolicy
med hjälp av funktionen .CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Kör verktyg
Kör verktyget Data API Builder (DAB) för att generera en konfigurationsfil och en enda entitet.
Skapa en ny konfiguration när inställningen
--set-session-context
är true.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true
Lägg till en ny entitet med namnet
revenue
fördbo.Revenues
tabellen.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Starta verktyget Data API Builder.
dab start
Gå till
http://localhost:5000/api/revenue
slutpunkten. Observera att inga data returneras. Det här beteendet beror på att sessionskontexten inte har angetts och inga poster matchar filterpredikatet.
Testa i SQL
Testa filtret och predikatet i SQL direkt för att säkerställa att det fungerar.
Anslut till SQL-servern igen med den klient eller det verktyg du föredrar.
sp_set_session_context
Kör för att manuellt ange sessionskontextensname
anspråk till det statiska värdetOscar
.EXEC sp_set_session_context 'name', 'Oscar';
Kör en typisk
SELECT *
fråga. Observera att resultaten filtreras automatiskt med hjälp av predikatet.SELECT * FROM dbo.Revenues;