Beveiliging op rijniveau implementeren met sessiecontext in Data API Builder
Gebruik de functie sessiecontext van SQL om beveiliging op rijniveau te implementeren in data-API builder.
Vereisten
- Bestaande SQL-server en -database.
- Data API builder CLI. De CLI installeren
- Een databaseclient (SQL Server Management Studio, Azure Data Studio, enzovoort)
- Als u geen client hebt geïnstalleerd, installeert u Azure Data Studio
SQL-tabel en -gegevens Creatie
Creatie een tabel met fictieve gegevens die u in dit voorbeeldscenario kunt gebruiken.
Maak verbinding met de SQL-database met behulp van de client of het hulpprogramma van uw voorkeur.
Creatie een tabel met de naam
Revenues
,id
category
,revenue
enusername
kolommen.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
Voeg vier rijen met voorbeeldboeken in de
Revenues
tabel in.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO
Test uw gegevens met een eenvoudige
SELECT *
query.SELECT * FROM dbo.Revenues
Maak een functie met de naam
RevenuesPredicate
. Met deze functie worden de resultaten gefilterd op basis van de huidige sessiecontext.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));
Creatie een beveiligingsbeleid met de naam
RevenuesSecurityPolicy
met behulp van de functie.CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Hulpprogramma Uitvoeren
Voer het DAB-hulpprogramma (Data API Builder) uit om een configuratiebestand en één entiteit te genereren.
Creatie een nieuwe configuratie terwijl u deze instelt
--set-session-context
op true.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true
Voeg een nieuwe entiteit toe met de naam
revenue
voor dedbo.Revenues
tabel.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Start het hulpprogramma Data API Builder.
dab start
Navigeer naar het
http://localhost:5000/api/revenue
eindpunt. U ziet dat er geen gegevens worden geretourneerd. Dit gedrag treedt op omdat de sessiecontext niet is ingesteld en er geen records overeenkomen met het filterpredicaat.
Testen in SQL
Test het filter en predicaat rechtstreeks in SQL om te controleren of het werkt.
Maak opnieuw verbinding met de SQL-server met behulp van de client of het hulpprogramma van uw voorkeur.
Voer de
sp_set_session_context
uit om de claim vanname
uw sessiecontext handmatig in te stellen op de statische waardeOscar
.EXEC sp_set_session_context 'name', 'Oscar';
Voer een typische
SELECT *
query uit. U ziet dat de resultaten automatisch worden gefilterd met behulp van het predicaat.SELECT * FROM dbo.Revenues;