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
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;