Compartilhar via


CREATE SECURITY POLICY (Transact-SQL)

Applies to: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do AzureSQL analytics ponto de extremidade em Microsoft FabricWarehouse no banco de dados Microsoft FabricSQL em Microsoft Fabric

Cria uma política de segurança para segurança em nível de no sql Mecanismo de Banco de Dados.

A segurança em nível de linha em Fabric Data Warehouse opera de forma semelhante a outros produtos do SQL Mecanismo de Banco de Dados. Para obter mais informações e exemplos de segurança em nível de linha no Fabric Data Warehouse ou no ponto de extremidade de análise do SQL, consulte Segurança no nível derow no Fabric data warehousing.

Transact-SQL convenções de sintaxe

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 para identificadores e ser exclusivos no banco de dados e em seu esquema.

schema_name

O nome do esquema ao qual a política de segurança pertence. schema_name é obrigatório devido à associação de esquema.

[ FILTRO | BLOQUEIO ]

O tipo de predicado de segurança para a função a ser associada à tabela de destino.

  • Predicados FILTER filtram silenciosamente as linhas que estão disponíveis para operações de leitura.
  • Predicados BLOCK bloqueiam explicitamente as operações de gravação que violam a função de predicado.

tvf_schema_name.security_predicate_function_name

A função de valor de tabela embutida que será usada como um predicado e que será imposta em consultas em uma tabela de destino. No máximo um predicado de segurança pode ser definido para uma determinada operação DML em uma tabela específica. A função de valor de tabela em linha deve ter sido criada usando a opção SCHEMABINDING.

{ column_name | Expressão }

Um nome da coluna ou expressão usada como um 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 internas, 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 de destino à qual o predicado de segurança será aplicado. Várias políticas de segurança desabilitadas podem ser direcionadas a uma operação DML específica, mas apenas uma pode ser habilitada em determinado momento.

block_dml_operation

A operação DML específica para à qual o predicado de bloqueio será aplicado. AFTER especifica que o predicado será avaliado nos valores das linhas após a execução da operação DML (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 = { ON | DESLIGADO } ]

Habilita ou desabilita a política de segurança ao impor seus predicados de segurança nas tabelas de destino. Se não especificado, a política de segurança que está sendo criada é habilitada.

[ SCHEMABINDING = { ON | DESLIGADO } ]

Indica se todas as funções de predicado na política devem ser criadas com a opção SCHEMABINDING. Por padrão, essa configuração é ON, e todas as funções devem ser criadas com SCHEMABINDING.

NÃO PARA REPLICAÇÃO

Indica que a política 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 Controle o comportamento de gatilhos e restrições durante a sincronização (programação de Transact-SQL de replicação).

[ table_schema_name. ] table_name

A tabela de destino à qual o predicado de segurança será aplicado. Várias políticas de segurança desabilitadas podem direcionar uma única tabela, mas apenas uma pode ser habilitada em um determinado momento.

Remarks

Ao usar funções de predicado com tabelas com otimização de memória, você deve incluir SCHEMABINDING e usar a dica de compilação WITH NATIVE_COMPILATION.

Os predicados de bloqueio são avaliados depois que a operação DML correspondente é executada. Portanto, há o perigo de que uma READ UNCOMMITTED consulta possa ver valores transitórios que serão revertidos.

Permissions

Requer a ALTER ANY SECURITY POLICY permissão e ALTER a permissão no esquema.

Além disso, as seguintes permissões são necessárias para cada predicado que é adicionado:

  • Permissões SELECT e REFERENCES na função que está sendo usada como um predicado.

  • Permissão REFERENCES na tabela de destino associada à política.

  • Permissão REFERENCES em cada coluna da tabela de destino usada como argumentos.

Examples

Os exemplos a seguir demonstram o uso da sintaxe CREATE SECURITY POLICY. Para obter um exemplo de um cenário de política 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 política de segurança com um predicado de filtro para a tabela dbo.Customer e deixa a política de segurança desabilitada.

CREATE SECURITY POLICY [FederatedSecurityPolicy]   
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])   
ON [dbo].[Customer];  

B. Criar uma política que afeta várias tabelas

A sintaxe a seguir cria uma política de segurança com três predicados de filtro em três tabelas diferentes e habilita a política 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

Adição de um predicado de filtro e de um predicado de bloco à tabela 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;