CREATE SECURITY POLICY (Transact-SQL)CREATE SECURITY POLICY (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Crea un criterio di sicurezza per la sicurezza a livello di riga.Creates a security policy for row level security.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

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 } } ]  

ArgomentiArguments

security_policy_namesecurity_policy_name
Nome del criterio di sicurezza.The name of the security policy. I nomi dei criteri sicurezza devono essere conformi alle regole per gli identificatori e devono essere univoci all'interno del database e rispetto al relativo schema.Security policy names must comply with the rules for identifiers and must be unique within the database and to its schema.

schema_nameschema_name
Nome dello schema a cui appartiene il criterio di sicurezza.Is the name of the schema to which the security policy belongs. schema_name è necessario per l'associazione allo schema.schema_name is required because of schema binding.

[ FILTER | BLOCK ][ FILTER | BLOCK ]
Tipo del predicato di sicurezza per la funzione da associare alla tabella di destinazione.The type of security predicate for the function being bound to the target table. I predicati FILTER filtrano automaticamente le righe disponibili per le operazioni di lettura.FILTER predicates silently filter the rows that are available to read operations. I predicati BLOCK bloccano in modo esplicito le operazioni di scrittura che violano la funzione di predicato.BLOCK predicates explicitly block write operations that violate the predicate function.

tvf_schema_name.security_predicate_function_nametvf_schema_name.security_predicate_function_name
Funzione con valori di tabella inline che verrà usata come predicato e che verrà applicata durante l'esecuzione di query su una tabella di destinazione.Is the inline table value function that will be used as a predicate and that will be enforced upon queries against a target table. È possibile definire al massimo un predicato di sicurezza per una specifica operazione DML su una determinata tabella.At most one security predicate can be defined for a particular DML operation against a particular table. La funzione con valori di tabella inline deve essere stata creata con l'opzione SCHEMABINDING.The inline table value function must have been created using the SCHEMABINDING option.

{ column_name | expression }{ column_name | expression }
Espressione o nome di colonna usato come parametro per la funzione di predicato di sicurezza.A column name or expression used as a parameter for the security predicate function. Si può usare qualsiasi colonna nella tabella di destinazione.Any column on the target table can be used. Un'espressione può includere solo costanti, funzioni scalari predefinite, operatori e colonne della tabella di destinazione.An Expression can only include constants, built in scalar functions, operators and columns from the target table. È necessario specificare un nome di colonna o un'espressione per ogni parametro della funzione.A column name or expression needs to be specified for each parameter of the function.

table_schema_name.table_nametable_schema_name.table_name
Tabella di destinazione a cui verrà applicato il predicato di sicurezza.Is the target table to which the security predicate will be applied. A una singola tabella possono fare riferimento più criteri di sicurezza disabilitati per un'operazione DML specifica, ma è possibile abilitarne solo uno.Multiple disabled security policies can target a single table for a particular DML operation, but only one can be enabled at any given time.

<block_dml_operation> Operazione DML specifica per la quale verrà applicato il predicato di blocco.<block_dml_operation> The particular DML operation for which the block predicate will be applied. AFTER specifica che il predicato verrà valutato in base ai valori delle righe dopo l'esecuzione dell'operazione DML (INSERT o UPDATE).AFTER specifies that the predicate will be evaluated on the values of the rows after the DML operation was performed (INSERT or UPDATE). BEFORE specifica che il predicato verrà valutato in base ai valori delle righe prima dell'esecuzione dell'operazione DML (UPDATE o DELETE).BEFORE specifies that the predicate will be evaluated on the values of the rows before the DML operation is performed (UPDATE or DELETE). Se non è specificata alcuna operazione, il predicato verrà applicato a tutte le operazioni.If no operation is specified, the predicate will apply to all operations.

[ STATE = { ON | OFF } ][ STATE = { ON | OFF } ]
Abilita o disabilita il criterio di sicurezza per l'applicazione dei relativi predicati di sicurezza alle tabelle di destinazione.Enables or disables the security policy from enforcing its security predicates against the target tables. Se non specificato, il criterio di sicurezza creato è abilitato.If not specified the security policy being created is enabled.

[ SCHEMABINDING = { ON | OFF } ][ SCHEMABINDING = { ON | OFF } ]
Indica se tutte le funzioni di predicato nei criteri devono essere create con l'opzione SCHEMABINDING.Indicates whether all predicate functions in the policy must be created with the SCHEMABINDING option. Per impostazione predefinita tutte le funzioni devono essere create con SCHEMABINDING.By default, all functions must be created with SCHEMABINDING.

NOT FOR REPLICATIONNOT FOR REPLICATION
Indica che il criterio di sicurezza non deve essere eseguito quando un agente di replica modifica l'oggetto di destinazione.Indicates that the security policy should not be executed when a replication agent modifies the target object. Per altre informazioni, vedere Controllare il comportamento di trigger e vincoli durante la sincronizzazione (programmazione Transact-SQL della replica).For more information, see Control the Behavior of Triggers and Constraints During Synchronization (Replication Transact-SQL Programming).

[table_schema_name.] table_name[table_schema_name.] table_name
Tabella di destinazione a cui verrà applicato il predicato di sicurezza.Is the target table to which the security predicate will be applied. A una singola tabella possono fare riferimento più criteri di sicurezza disabilitati, ma è possibile abilitarne solo uno.Multiple disabled security policies can target a single table, but only one can be enabled at any given time.

RemarksRemarks

Quando si usano le funzioni di predicato con tabelle ottimizzate per la memoria, è necessario includere SCHEMABINDING e usare l'hint per la compilazioneWITH NATIVE_COMPILATION.When using predicate functions with memory-optimized tables, you must include SCHEMABINDING and use the WITH NATIVE_COMPILATION compilation hint.

I predicati di blocco vengono valutati dopo l'esecuzione dell'operazione DML corrispondente.Block predicates are evaluated after the corresponding DML operation is executed. Pertanto una query READ UNCOMMITTED può rilevare valori temporanei che saranno sottoposti a rollback.Therefore, a READ UNCOMMITTED query can see transient values that will be rolled back.

PermissionsPermissions

Richiede l'autorizzazione ALTER ANY SECURITY POLICY e l'autorizzazione ALTER per lo schema.Requires the ALTER ANY SECURITY POLICY permission and ALTER permission on the schema.

Inoltre, per ogni predicato che viene aggiunto sono richieste le autorizzazioni seguenti:Additionally the following permissions are required for each predicate that is added:

  • Le autorizzazioni SELECT e REFERENCES per la funzione usata come predicato.SELECT and REFERENCES permissions on the function being used as a predicate.

  • L'autorizzazione REFERENCES per la tabella di destinazione associata al criterio.REFERENCES permission on the target table being bound to the policy.

  • L'autorizzazione REFERENCES per ogni colonna della tabella di destinazione usata come argomento.REFERENCES permission on every column from the target table used as arguments.

EsempiExamples

Gli esempi seguenti illustrano l'uso della sintassi di CREATE SECURITY POLICY .The following examples demonstrate the use of the CREATE SECURITY POLICY syntax. Per un esempio di scenario completo dei criteri di sicurezza, vedere Sicurezza a livello di riga.For an example of a complete security policy scenario, see Row-Level Security.

A.A. Creazione di un criterio di sicurezzaCreating a security policy

La sintassi seguente crea un criterio di sicurezza con un predicato del filtro per la tabella Customer e lascia il criterio di sicurezza disabilitato.The following syntax creates a security policy with a filter predicate for the Customer table, and leaves the security policy disabled.

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

b.B. Creazione di un criterio che interessa più tabelleCreating a policy that affects multiple tables

La sintassi seguente crea un criterio di sicurezza con tre predicati del filtro per tre tabelle diverse e abilita il criterio di sicurezza.The following syntax creates a security policy with three filter predicates on three different tables, and enables the security policy.

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.C. Creazione di criteri con più tipi di predicati di sicurezzaCreating a policy with multiple types of security predicates

Aggiunta sia di un predicato del filtro sia un predicato di blocco alla tabella Sales.Adding both a filter predicate and a block predicate to the Sales table.

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;  

Vedere ancheSee Also

Sicurezza a livello di riga Row-Level Security
ALTER SECURITY POLICY (Transact-SQL) ALTER SECURITY POLICY (Transact-SQL)
DROP SECURITY POLICY (Transact-SQL) DROP SECURITY POLICY (Transact-SQL)
sys.security_policies (Transact-SQL) sys.security_policies (Transact-SQL)
sys.security_predicates (Transact-SQL)sys.security_predicates (Transact-SQL)