Implémenter la sécurité au niveau des lignes avec le contexte de session dans le Générateur d’API de données
Utilisez la fonctionnalité de contexte de session de SQL pour implémenter la sécurité au niveau des lignes dans le Générateur d’API de données.
Prérequis
- Serveur et base de données SQL existants.
- INTERFACE CLI du générateur d’API de données. Installer CLI
- Un client de base de données (SQL Server Management Studio, Azure Data Studio, etc.)
- Si aucun client n’est installé, installez Azure Data Studio
Create table SQL et données
Create une table avec des données fictives à utiliser dans cet exemple de scénario.
Connectez-vous à la base de données SQL à l’aide de votre client ou outil préféré.
Create une table nommée
Revenues
avecid
les colonnes ,category
,revenue
etusername
.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
Insérez quatre exemples de lignes de livre dans le
Revenues
tableau.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO
Testez vos données avec une requête simple
SELECT *
.SELECT * FROM dbo.Revenues
Créez une fonction nommée
RevenuesPredicate
. Cette fonction filtre les résultats en fonction du contexte de session actuel.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 une stratégie de sécurité nommée
RevenuesSecurityPolicy
à l’aide de la fonction .CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Outil d’exécution
Exécutez l’outil Générateur d’API de données (DAB) pour générer un fichier de configuration et une entité unique.
Create une nouvelle configuration tout en définissant sur
--set-session-context
true.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true
Ajoutez une nouvelle entité nommée
revenue
pour ladbo.Revenues
table.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Démarrez l’outil Générateur d’API de données.
dab start
Accédez au point de
http://localhost:5000/api/revenue
terminaison. Notez qu’aucune donnée n’est retournée. Ce comportement se produit parce que le contexte de session n’est pas défini et qu’aucun enregistrement ne correspond au prédicat de filtre.
Test dans SQL
Testez directement le filtre et le prédicat dans SQL pour vous assurer qu’ils fonctionnent.
Connectez-vous à nouveau au serveur SQL à l’aide de votre client ou outil préféré.
Exécutez pour définir manuellement la
sp_set_session_context
revendication de votre contexte dename
session sur la valeurOscar
statique .EXEC sp_set_session_context 'name', 'Oscar';
Exécutez une requête classique
SELECT *
. Observez que les résultats sont automatiquement filtrés à l’aide du prédicat.SELECT * FROM dbo.Revenues;