Partager via


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.)

Create table SQL et données

Create une table avec des données fictives à utiliser dans cet exemple de scénario.

  1. Connectez-vous à la base de données SQL à l’aide de votre client ou outil préféré.

  2. Create une table nommée Revenues avec idles colonnes , category, revenueet username .

    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
    
  3. 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
    
  4. Testez vos données avec une requête simple SELECT * .

    SELECT * FROM dbo.Revenues
    
  5. 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));
    
  6. 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.

  1. 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
    
  2. Ajoutez une nouvelle entité nommée revenue pour la dbo.Revenues table.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Démarrez l’outil Générateur d’API de données.

    dab start
    
  4. 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.

  1. Connectez-vous à nouveau au serveur SQL à l’aide de votre client ou outil préféré.

  2. Exécutez pour définir manuellement la sp_set_session_context revendication de votre contexte de name session sur la valeur Oscarstatique .

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. 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;