Partilhar via


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

Utilize a funcionalidade de contexto de sessão do SQL para implementar a segurança ao nível da linha no Construtor de API de Dados.

Pré-requisitos

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

Create dados e tabelas SQL

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

  1. Ligue-se à base de dados SQL com o seu cliente ou ferramenta preferencial.

  2. Create uma tabela com ido nome Revenues , category, revenuee username colunas.

    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 os seus dados com uma consulta simples SELECT * .

    SELECT * FROM dbo.Revenues
    
  5. Create uma função chamada RevenuesPredicate. Esta função filtrará os resultados com base no contexto de 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 com o nome RevenuesSecurityPolicy com a função .

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

Executar ferramenta

Execute a ferramenta DoB (Data API Builder) para gerar um ficheiro de configuração e uma única entidade.

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

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

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

    dab start
    
  4. Navegue para o http://localhost:5000/api/revenue ponto final. Observe que não são devolvidos dados. Este comportamento ocorre porque o contexto da sessão não está definido e nenhum registo corresponde ao predicado do filtro.

Testar no SQL

Teste o filtro e predicado diretamente no SQL para garantir que está a funcionar.

  1. Ligue-se novamente ao SQL Server com o seu cliente ou ferramenta preferencial.

  2. Execute o sp_set_session_context para definir manualmente a afirmaçã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 com o predicado.

    SELECT * FROM dbo.Revenues;