Partilhar via


ALTERAR POLÍTICA DE SEGURANÇA (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Azure SQL Database AzureSQL Managed InstanceSQL analytics endpoint em Microsoft FabricWarehouse em Microsoft FabricSQL 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:

  • SELECT e REFERENCES permissões sobre a função que está sendo usada como predicado.
  • REFERENCES permissão na tabela de destino sendo vinculada à política.
  • REFERENCES permissã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;