Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
Base de Dados SQL do Azure
Azure SQL Managed Instance
SQL analytics endpoint em Microsoft Fabric
Warehouse na base de dados Microsoft Fabric
SQL em Microsoft Fabric
Cria uma política de segurança para segurança nível de linha no Database Engine SQL.
A segurança ao nível da linha em Fabric Data Warehouse funciona de forma semelhante a outros produtos SQL Database Engine. Para mais informações e exemplos de segurança ao nível de linha em Fabric Data Warehouse ou no endpoint de análise SQL, consulte Segurança ao nível de linha em Fabric data warehousing.
Convenções sintáticas Transact-SQL
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
O nome da política de segurança. Os nomes das políticas de segurança devem seguir as regras dos identificadores e ser únicos dentro da base de dados e do seu esquema.
schema_name
O nome do esquema ao qual a diretiva de segurança pertence. schema_name é necessário devido à vinculação de esquema.
[ FILTRAR | BLOCO ]
O tipo de predicado de segurança para a função a vincular à tabela de destino.
-
FILTEROs predicados filtram silenciosamente as linhas que estão disponíveis para operações de leitura. -
BLOCKpredicados explicitamente bloquear operações de gravação que violam a função de predicado.
tvf_schema_name.security_predicate_function_name
A função de valor da tabela inline que será usada como predicado e que será aplicada em consultas contra uma tabela alvo. No máximo, um predicado de segurança pode ser definido para uma operação DML específica em relação a uma tabela específica. A função de valor da tabela embutida deve ter sido criada usando a SCHEMABINDING opção.
{ column_name | expressão }
Um nome de coluna ou expressão usada como parâmetro para a função de predicado de segurança. Qualquer coluna na tabela de destino pode ser usada. Uma Expressão só pode incluir constantes, funções escalares incorporadas, operadores e colunas da tabela de destino. Um nome de coluna ou expressão precisa ser especificado para cada parâmetro da função.
table_schema_name.table_name
A tabela alvo à qual será aplicado o predicado de segurança. Várias políticas de segurança desabilitadas podem direcionar uma única tabela para uma operação DML específica, mas apenas uma pode ser habilitada a qualquer momento.
block_dml_operation
A operação DML específica para a qual o predicado de bloco será aplicado.
AFTER especifica que o predicado será avaliado nos valores das linhas após a operação DML ter sido executada (INSERT ou UPDATE).
BEFORE especifica que o predicado será avaliado nos valores das linhas antes que a operação DML seja executada (UPDATE ou DELETE). Se nenhuma operação for especificada, o predicado será aplicado a todas as operações.
[ ESTADO = { EM | DESLIGADO } ]
Habilita ou desabilita a diretiva de segurança de impor seus predicados de segurança contra as tabelas de destino. Se não for especificado, a diretiva de segurança que está sendo criada será habilitada.
[ SCHEMABINDING = { EM | DESLIGADO } ]
Indica se todas as funções de predicado na política devem ser criadas com a SCHEMABINDING opção. Por padrão, essa configuração é ON e todas as funções devem ser criadas com SCHEMABINDING.
NÃO SE DESTINA À REPLICAÇÃO
Indica que a diretiva de segurança não deve ser executada quando um agente de replicação modifica o objeto de destino. Para mais informações, veja Controlar o Comportamento dos Gatilhos e Restrições Durante a Sincronização (Replicação Transact-SQL Programação).
[ table_schema_name. ] table_name
A tabela alvo à qual será aplicado o predicado de segurança. Várias políticas de segurança desativadas podem ter como alvo uma única tabela, mas apenas uma pode ser habilitada a qualquer momento.
Remarks
Ao usar funções de predicado com tabelas com otimização de memória, você deve incluir SCHEMABINDING e usar a dica WITH NATIVE_COMPILATION de compilação.
Os predicados de bloco são avaliados após a execução da operação DML correspondente. Portanto, existe o risco de uma READ UNCOMMITTED consulta ver valores transitórios que serão revertidos.
Permissions
Requer permissão ALTER ANY SECURITY POLICY e ALTER permissão no esquema.
Além disso, as seguintes permissões são necessárias para cada predicado adicionado:
SELECTeREFERENCESpermissões sobre a função que está sendo usada como predicado.REFERENCESpermissão na tabela de destino sendo vinculada à política.REFERENCESpermissão em todas as colunas da tabela de destino usadas como argumentos.
Examples
Os exemplos a seguir demonstram o uso da CREATE SECURITY POLICY sintaxe. Para obter um exemplo de um cenário de diretiva de segurança completo, consulte Segurança em nível de linha.
A. Criar uma política de segurança
A sintaxe a seguir cria uma diretiva de segurança com um predicado de filtro para a dbo.Customer tabela e deixa a diretiva de segurança desabilitada.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])
ON [dbo].[Customer];
B. Criar uma política que afete várias tabelas
A sintaxe a seguir cria uma diretiva de segurança com três predicados de filtro em três tabelas diferentes e habilita a diretiva de segurança.
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. Criar uma política com vários tipos de predicados de segurança
Adicionar um predicado de filtro e um predicado de bloco à dbo.Sales tabela.
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;