Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Se aplica a: SQL Server 2016 (13.x) y versiones
posteriores Azure SQL Database
Azure SQL Instancia administrada
punto de conexión de SQL Analytics en Microsoft Fabric
Warehouse en la base de datos SQL de Microsoft Fabric en Microsoft Fabric
Crea una directiva de seguridad para la seguridad de nivel de filas.
Convenciones de sintaxis de Transact-SQL
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 } } ]
El nombre de la directiva de seguridad. Los nombres de directivas de seguridad deben seguir las reglas de los identificadores y deben ser únicos en la base de datos y para su esquema.
Es el nombre del esquema al que pertenece la directiva de seguridad. schema_name es necesario debido a los enlaces de esquema.
El tipo de predicado de seguridad de la función vinculada a la tabla de destino. Los predicados FILTER
filtran en modo silencioso las filas disponibles para leer operaciones. Los predicados BLOCK
bloquean explícitamente las operaciones de escritura que infringen la función del predicado.
Es la función de valor de tabla insertada que se usará como predicado y que se aplicará en 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
.
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 incorporadas, 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.
Es la 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.
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.
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.
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
.
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, consulte Controlar el comportamiento de desencadenadores y restricciones durante la sincronización (programación de la replicación con Transact-SQL).
Es la 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.
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 consulta READ UNCOMMITTED puede mostrar valores transitorios que se revertirán.
Requiere el permiso ALTER ANY SECURITY POLICY y el permiso ALTER en el esquema.
Además, son necesarios los siguientes permisos para cada predicado que se agrega:
Los permisos SELECT y REFERENCES en la función que se utiliza como predicado.
El permiso REFERENCES en la tabla de destino que se enlaza a la directiva.
El permiso REFERENCES en todas las columnas de la tabla de destino que se utilizan como argumentos.
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.
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];
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);
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;
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoy