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.)
- Se você não tiver um cliente instalado, instale o Azure Data Studio
Create tabela e dados SQL
Create uma tabela com dados fictícios a serem usados neste cenário de exemplo.
Conecte-se ao banco de dados SQL usando seu cliente ou ferramenta preferencial.
Create uma tabela chamada
Revenues
comid
colunas ,category
,revenue
eusername
.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 seus dados com uma consulta simples
SELECT *
.SELECT * FROM dbo.Revenues
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));
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.
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
Adicione uma nova entidade chamada
revenue
para adbo.Revenues
tabela.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Inicie a ferramenta construtor de API de Dados.
dab start
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.
Conecte-se ao SQL Server novamente usando seu cliente ou ferramenta preferencial.
Execute o
sp_set_session_context
para definir manualmente a declaraçã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 usando o predicado .SELECT * FROM dbo.Revenues;