Implementación de la seguridad de nivel de fila con contexto de sesión en Data API Builder
Use la característica de contexto de sesión de SQL para implementar la seguridad de nivel de fila en el generador de Data API.
Requisitos previos
- Base de datos y servidor SQL existente.
- CLI del generador de API de datos. Instalación de la CLI de Azure
- Un cliente de base de datos (SQL Server Management Studio, Azure Data Studio, etc.)
- Si no tiene instalado un cliente, instale Azure Data Studio.
Create tabla y datos de SQL
Create una tabla con datos ficticios que se usarán en este escenario de ejemplo.
Conéctese a la base de datos SQL mediante su cliente o herramienta preferidos.
Create una tabla denominada
Revenues
conid
columnas ,category
,revenue
yusername
.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
Inserte cuatro filas de libro de ejemplo en la
Revenues
tabla.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO
Pruebe los datos con una consulta sencilla
SELECT *
.SELECT * FROM dbo.Revenues
Cree una función denominada
RevenuesPredicate
. Esta función filtrará los resultados en función del contexto de sesión actual.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 una directiva de seguridad denominada
RevenuesSecurityPolicy
mediante la función .CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Ejecutar herramienta
Ejecute la herramienta Generador de API de datos (DAB) para generar un archivo de configuración y una sola entidad.
Create una nueva configuración al establecer
--set-session-context
en true.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true
Agregue una nueva entidad denominada
revenue
para ladbo.Revenues
tabla.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Inicie la herramienta Generador de API de datos.
dab start
Vaya al punto de
http://localhost:5000/api/revenue
conexión. Observe que no se devuelve ningún dato. Este comportamiento se produce porque el contexto de sesión no está establecido y no hay registros que coincidan con el predicado de filtro.
Prueba en SQL
Pruebe el filtro y el predicado en SQL directamente para asegurarse de que funciona.
Vuelva a conectarse al servidor SQL Server con su cliente o herramienta preferidos.
sp_set_session_context
Ejecute para establecer manualmente la notificación del contexto dename
sesión en el valorOscar
estático .EXEC sp_set_session_context 'name', 'Oscar';
Ejecute una consulta típica
SELECT *
. Observe que los resultados se filtran automáticamente mediante el predicado.SELECT * FROM dbo.Revenues;