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 Azure SQL Database
AzureSQL Managed Instance
SQL analytics endpoint em Microsoft Fabric
Warehouse em Microsoft Fabric
SQL database em Microsoft Fabric
Altera uma política de segurança.
Transact-SQL convenções de sintaxe
Sintaxe
ALTER SECURITY POLICY schema_name.security_policy_name
[
{ ADD { FILTER | BLOCK } PREDICATE tvf_schema_name.security_predicate_function_name
( { column_name | arguments } [ , ...n ] ) ON table_schema_name.table_name
[ <block_dml_operation> ] }
| { ALTER { FILTER | BLOCK } PREDICATE tvf_schema_name.new_security_predicate_function_name
( { column_name | arguments } [ , ...n ] ) ON table_schema_name.table_name
[ <block_dml_operation> ] }
| { DROP { FILTER | BLOCK } PREDICATE ON table_schema_name.table_name }
| [ <additional_add_alter_drop_predicate_statements> [ , ...n ] ]
] [ WITH ( STATE = { ON | OFF } ) ]
[ NOT FOR REPLICATION ]
[;]
<block_dml_operation>
[ { AFTER { INSERT | UPDATE } }
| { BEFORE { UPDATE | DELETE } } ]
Argumentos
security_policy_name
O nome da política de segurança. Os nomes das políticas de segurança devem cumprir as regras para identificadores e devem ser exclusivos dentro do banco de dados e para 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 vinculada à tabela de destino.
FILTER Os predicados filtram silenciosamente as linhas que estão disponíveis para operações de leitura.
BLOCK predicados 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 embutida que você usa como predicado e que você impõe em consultas em uma tabela de destino. No máximo, você pode definir um predicado de segurança para uma operação DML específica em relação a uma tabela específica. Crie a função de valor da tabela embutida usando a SCHEMABINDING opção.
{ column_name | argumentos }
O nome da coluna ou expressão usada como parâmetros para a função de predicado de segurança. Todas as colunas na tabela de destino podem ser usadas como argumentos para a função de predicado. Expressões que incluem literais, built-ins e expressões que usam operadores aritméticos podem ser usadas.
table_schema_name.nome_da_tabela
A tabela de destino para 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 o predicado de bloco aplicado.
AFTER especifica que o predicado é avaliado nos valores de linha após a operação DML ter sido executada (INSERT ou UPDATE).
BEFORE especifica que o predicado é avaliado nos valores de linha 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.
Não é possível ALTER a operação para um predicado de bloco aplicado porque a operação é usada para identificar exclusivamente o predicado. Em vez disso, você deve soltar o predicado e adicionar um novo para a nova operação.
COM ( 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.
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 obter mais informações, consulte Controlar o comportamento de gatilhos e restrições durante a sincronização (replicação Transact-SQL programação).
table_schema_name.nome_da_tabela
A tabela de destino para o predicado de segurança aplicado. Várias políticas de segurança desativadas podem ter como alvo uma única tabela, mas apenas uma pode ser habilitada a qualquer momento.
Observações
A instrução ALTER SECURITY POLICY está no escopo de uma transação. Se a transação for revertida, a instrução também será revertida.
Ao usar funções de predicado com tabelas com otimização de memória, as políticas de segurança devem incluir SCHEMABINDING e usar a dica WITH NATIVE_COMPILATION de compilação. O SCHEMABINDING argumento não pode ser alterado com a ALTER instrução porque se aplica a todos os predicados. Para alterar a vinculação de esquema, você deve soltar e recriar a diretiva de segurança.
Os predicados de bloco são avaliados após a execução da operação DML correspondente. Como tal, há perigo quando uma consulta READ UNCOMMITTED pode ver valores transitórios que serão revertidos.
Permissões
Requer a permissão de ALTER ANY SECURITY POLICY.
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.
Exemplos
Os exemplos a seguir demonstram o uso da ALTER 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.
Um. Adicionar um predicado adicional a uma política
A sintaxe a seguir altera uma diretiva de segurança, adicionando um predicado de filtro na mytable tabela.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate(column1)
ON myschema.mytable;
B. Habilitar uma política existente
O exemplo a seguir usa a sintaxe ALTER para habilitar uma diretiva de segurança.
ALTER SECURITY POLICY pol1 WITH ( STATE = ON );
C. Adicionar e soltar vários predicados
A sintaxe a seguir altera uma diretiva de segurança, adicionando predicados de mytable1 filtro nas tabelas e mytable3 e removendo o predicado de filtro na mytable2 tabela.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate1(column1)
ON myschema.mytable1,
DROP FILTER PREDICATE
ON myschema.mytable2,
ADD FILTER PREDICATE schema_preds.SecPredicate2(column2, 1)
ON myschema.mytable3;
D. Alterar o predicado em uma tabela
A sintaxe a seguir altera o predicado de filtro existente na myschema.mytable tabela para ser a SecPredicate2 função.
ALTER SECURITY POLICY pol1
ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)
ON myschema.mytable;
E. Alterar um predicado de bloco
Alterar a função de predicado de bloco para uma operação em uma tabela.
ALTER SECURITY POLICY rls.SecPol
ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId)
ON dbo.Sales AFTER INSERT;