Compartilhar via


Implementar a segurança em nível de linha com contexto de sessão no Construtor de API de Dados

Use o recurso de contexto de sessão do SQL para implementar a segurança em nível de linha no Construtor de API de Dados.

Pré-requisitos

  • SqL Server e banco de dados existentes.
  • CLI do construtor de API de Dados. Instalar a CLI
  • Um cliente de banco de dados (SQL Server Management Studio, Azure Data Studio etc.)

Create tabela e dados SQL

Create uma tabela com dados fictícios a serem usados neste cenário de exemplo.

  1. Conecte-se ao banco de dados SQL usando seu cliente ou ferramenta preferencial.

  2. Create uma tabela chamada Revenues com idcolunas , category, revenuee 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. Insira quatro linhas de livro de exemplo na Revenues tabela.

    INSERT INTO dbo.Revenues VALUES
        (1, 'Book', 5000, 'Oscar'),  
        (2, 'Comics', 10000, 'Oscar'),  
        (3, 'Journals', 20000, 'Hannah'),  
        (4, 'Series', 40000, 'Hannah')
    GO
    
  4. Teste seus dados com uma consulta simples SELECT * .

    SELECT * FROM dbo.Revenues
    
  5. Crie uma função chamada RevenuesPredicate. Essa função filtrará os resultados com base no contexto da sessão atual.

    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 uma política de segurança chamada RevenuesSecurityPolicy usando a função .

    CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy
    ADD FILTER PREDICATE dbo.RevenuesPredicate(username)
    ON dbo.Revenues;
    

Executar ferramenta

Execute a ferramenta DAB (Construtor de API de Dados) para gerar um arquivo de configuração e uma única entidade.

  1. Create uma nova configuração ao definir --set-session-context como true.

    dab init \
        --database-type mssql \
        --connection-string "<sql-connection-string>" \
        --set-session-context true
    
  2. Adicione uma nova entidade chamada revenue para a dbo.Revenues tabela.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Inicie a ferramenta construtor de API de Dados.

    dab start
    
  4. Navegue até o http://localhost:5000/api/revenue ponto de extremidade. Observe que nenhum dado é retornado. Esse comportamento ocorre porque o contexto da sessão não está definido e nenhum registro corresponde ao predicado de filtro.

Testar no SQL

Teste o filtro e o predicado no SQL diretamente para garantir que ele esteja funcionando.

  1. Conecte-se ao SQL Server novamente usando seu cliente ou ferramenta preferencial.

  2. Execute o sp_set_session_context para definir manualmente a declaração do contexto de name sessão para o valor Oscarestático .

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. Execute uma consulta típica SELECT * . Observe que os resultados são filtrados automaticamente usando o predicado .

    SELECT * FROM dbo.Revenues;