Implementare la sicurezza a livello di riga con il contesto della sessione in Generatore API dati
Usare la funzionalità di contesto sessione di SQL per implementare la sicurezza a livello di riga in Generatore API dati.
Prerequisiti
- Server SQL esistente e database.
- Interfaccia della riga di comando del generatore di API dati. Installare l'interfaccia della riga di comando
- Un client di database (SQL Server Management Studio, Azure Data Studio e così via)
- Se non è installato un client, installare Azure Data Studio
Create tabella e dati SQL
Create una tabella con dati fittizi da usare in questo scenario di esempio.
Connettersi al database SQL usando il client o lo strumento preferito.
Create una tabella denominata
Revenues
conid
,category
,revenue
eusername
colonne.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
Inserire quattro righe del libro di esempio nella
Revenues
tabella.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO
Testare i dati con una
SELECT *
semplice query.SELECT * FROM dbo.Revenues
Creare una funzione denominata
RevenuesPredicate
. Questa funzione filtra i risultati in base al contesto della sessione corrente.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 criteri di sicurezza denominati
RevenuesSecurityPolicy
usando la funzione.CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Eseguire lo strumento
Eseguire lo strumento DAB (Data API Builder) per generare un file di configurazione e una singola entità.
Create una nuova configurazione durante l'impostazione
--set-session-context
su true.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true
Aggiungere una nuova entità denominata
revenue
per ladbo.Revenues
tabella.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Avviare lo strumento Generatore API dati.
dab start
Passare all'endpoint
http://localhost:5000/api/revenue
. Osservare che non vengono restituiti dati. Questo comportamento si verifica perché il contesto della sessione non è impostato e nessun record corrisponde al predicato di filtro.
Test in SQL
Testare direttamente il filtro e il predicato in SQL per assicurarsi che funzioni.
Connettersi di nuovo al server SQL usando il client o lo strumento preferito.
Eseguire l'oggetto per impostare manualmente l'attestazione
sp_set_session_context
delname
contesto della sessione sul valoreOscar
statico .EXEC sp_set_session_context 'name', 'Oscar';
Eseguire una query tipica
SELECT *
. Osservare che i risultati vengono filtrati automaticamente usando il predicato.SELECT * FROM dbo.Revenues;