Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Applies to: SQL Server 2016 (13.x) y versiones posteriores
Azure SQL Database
Azure SQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse en Microsoft Fabric
SQL en Microsoft Fabric
Crea una directiva de seguridad para seguridad de nivel derow en sql Motor de base de datos.
La seguridad de nivel de fila en Fabric Data Warehouse funciona de forma similar a otros productos de SQL Motor de base de datos. Para obtener más información y ejemplos de seguridad de nivel de fila en Fabric Data Warehouse o el punto de conexión de SQL Analytics, consulte Seguridad de nivel de fila en Fabric almacenamiento de datos.
Transact-SQL convenciones de sintaxis
Syntax
CREATE SECURITY POLICY [schema_name. ] security_policy_name
{ ADD [ FILTER | BLOCK ] } PREDICATE tvf_schema_name.security_predicate_function_name
( { column_name | expression } [ , ...n] ) ON table_schema_name. table_name
[ <block_dml_operation> ] , [ , ...n]
[ WITH ( STATE = { ON | OFF } [,] [ SCHEMABINDING = { ON | OFF } ] ) ]
[ NOT FOR REPLICATION ]
[;]
<block_dml_operation>
[ { AFTER { INSERT | UPDATE } }
| { BEFORE { UPDATE | DELETE } } ]
Arguments
security_policy_name
El nombre de la directiva de seguridad. Los nombres de directiva de seguridad deben seguir las reglas de los identificadores y ser únicos dentro de la base de datos y su esquema.
schema_name
Nombre del esquema al que pertenece la directiva de seguridad. schema_name es necesario debido a los enlaces de esquema.
[ FILTRO | BLOQUEO ]
Tipo de predicado de seguridad para la función que se va a enlazar a la tabla de destino.
- Los predicados
FILTERfiltran en modo silencioso las filas disponibles para leer operaciones. - Los predicados
BLOCKbloquean explícitamente las operaciones de escritura que infringen la función del predicado.
tvf_schema_name.security_predicate_function_name
Función de valor de tabla insertada que se usará como predicado y que se aplicará a las consultas en una tabla de destino. Se puede definir, como máximo, un predicado de seguridad para una operación DML determinada en una tabla determinada. La función de valor de tabla insertada se debe haber creado con la opción SCHEMABINDING.
{ nombre_columna | expresión }
El nombre de columna o la expresión que se usan como parámetros de la función de predicado de seguridad. Se puede utilizar cualquier columna de la tabla de destino. Una expresión solo puede incluir constantes, funciones escalares integradas, operadores y columnas de la tabla de destino. Es necesario especificar un nombre o expresión de columna para cada parámetro de la función.
table_schema_name.table_name
Tabla de destino a la que se aplicará el predicado de seguridad. Puede haber varias directivas de seguridad deshabilitadas que tengan como destino una sola tabla para una operación DML concreta, pero no puede haber varias de ellas habilitadas al mismo tiempo.
block_dml_operation
La operación DML determinada a la que se aplicará el predicado de bloqueo.
AFTER especifica que el predicado se va a evaluar en función de los valores de las filas después de que se haya realizado la operación DML (INSERT o UPDATE).
BEFORE especifica que el predicado se va a evaluar en función de los valores de las filas antes de que se haya realizado la operación DML (UPDATE o DELETE). Si no se especifica ninguna operación, el predicado se aplicará a todas las operaciones.
[ ESTADO = { ON | APAPAGADO } ]
Habilita o deshabilita la aplicación de los predicados de seguridad de la directiva de seguridad en las tablas de destino. Si no se especifica, se habilita la directiva de seguridad que se está creando.
[ SCHEMABINDING = { ON | APAPAGADO } ]
Indica si todas las funciones de predicado de la directiva se deben crear con la opción SCHEMABINDING. De forma predeterminada, esta configuración es ON y todas las funciones se deben crear con SCHEMABINDING.
NO PARA REPLICACIÓN
Indica que la directiva de seguridad no debe ejecutarse cuando un agente de replicación modifica el objeto de destino. Para obtener más información, vea Control the Behavior of Triggers and Constraints During Synchronization (Replication Transact-SQL Programming).
[ table_schema_name. ] table_name
Tabla de destino a la que se aplicará el predicado de seguridad. Puede haber varias directivas de seguridad deshabilitadas que tengan como destino una sola tabla, pero no puede haber varias de ellas habilitadas al mismo tiempo.
Remarks
Al usar las funciones de predicado con tablas optimizadas para memoria, hay que incluir SCHEMABINDING y usar la sugerencia de compilación WITH NATIVE_COMPILATION.
Los predicados de bloqueo se evalúan después de ejecutar la operación DML correspondiente. Por lo tanto, existe el peligro de que una READ UNCOMMITTED consulta pueda ver valores transitorios que se revertirán.
Permissions
Requiere el ALTER ANY SECURITY POLICY permiso y ALTER el permiso en el esquema.
Además, son necesarios los siguientes permisos para cada predicado que se agrega:
Los permisos
SELECTyREFERENCESen la función que se usa como predicado.El permiso
REFERENCESen la tabla de destino que se enlaza a la directiva.El permiso
REFERENCESen todas las columnas de la tabla de destino que se usan como argumentos.
Examples
Los ejemplos siguientes muestran el uso de la sintaxis CREATE SECURITY POLICY. Para ver un ejemplo de un escenario completo de la directiva de seguridad, vea Seguridad de nivel de fila.
A. Creación de una directiva de seguridad
La siguiente sintaxis crea una directiva de seguridad con un predicado de filtro para la tabla dbo.Customer y deja deshabilitada la directiva de seguridad.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])
ON [dbo].[Customer];
B. Creación de una directiva que afecta a varias tablas
La siguiente sintaxis crea una directiva de seguridad con tres predicados de filtro en tres tablas diferentes y habilita la directiva de seguridad.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([CustomerId])
ON [dbo].[Customer],
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([VendorId])
ON [dbo].[ Vendor],
ADD FILTER PREDICATE [rls].[fn_securitypredicate2]([WingId])
ON [dbo].[Patient]
WITH (STATE = ON);
C. Creación de una directiva con varios tipos de predicados de seguridad
Agregue un predicado de filtro y un predicado de bloqueo a la tabla dbo.Sales.
CREATE SECURITY POLICY rls.SecPol
ADD FILTER PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales,
ADD BLOCK PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales AFTER INSERT;