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.)
- Se não tiver um cliente instalado, instale o Azure Data Studio
Create dados e tabelas SQL
Create uma tabela com dados fictícios a utilizar neste cenário de exemplo.
Ligue-se à base de dados SQL com o seu cliente ou ferramenta preferencial.
Create uma tabela com
id
o nomeRevenues
,category
,revenue
eusername
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
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
Teste os seus dados com uma consulta simples
SELECT *
.SELECT * FROM dbo.Revenues
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));
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.
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
Adicione uma nova entidade com o nome
revenue
para adbo.Revenues
tabela.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Inicie a ferramenta de construtor de API de Dados.
dab start
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.
Ligue-se novamente ao SQL Server com o seu cliente ou ferramenta preferencial.
Execute o
sp_set_session_context
para definir manualmente a afirmação do contexto dename
sessão para o valorOscar
estático .EXEC sp_set_session_context 'name', 'Oscar';
Execute uma consulta típica
SELECT *
. Observe que os resultados são filtrados automaticamente com o predicado.SELECT * FROM dbo.Revenues;