ALTER SECURITY POLICY (Transact-SQL)ALTER 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

Modifica un criterio di sicurezza.Alters a security policy.

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

SintassiSyntax

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

ArgomentiArguments

security_policy_namesecurity_policy_name
Nome del criterio di sicurezza.The name of the security policy. I nomi dei criteri di sicurezza devono soddisfare le regole per gli identificatori e devono essere univoci all'interno del database e rispetto al relativo schema.Security policy names must fulfill 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 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
È la funzione con valori di tabella inline usata come predicato e applicata per le query su una tabella di destinazione.Is the inline table value function you use as a predicate and that you enforce 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, you can define one security predicate for a particular DML operation against a particular table. Creare la funzione con valori di tabella inline con l'opzione SCHEMABINDING.Create the inline table value function using the SCHEMABINDING option.

{ column_name | arguments }{ column_name | arguments }
Espressione o nome di colonna usato come parametro per la funzione di predicato di sicurezza.The column name or expression used as parameters for the security predicate function. Tutte le colonne nella tabella di destinazione possono essere usate come argomenti per la funzione di predicato.Any columns on the target table can be used as arguments for the predicate function. È possibile usare espressioni che includono valori letterali, valori predefiniti ed espressioni che usano operatori aritmetici.Expressions that include literals, built-ins, and expressions that use arithmetic operators can be used.

table_schema_name.table_nametable_schema_name.table_name
È la tabella di destinazione per il predicato di sicurezza.Is the target table for the security predicate. 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><block_dml_operation>
Operazione DML specifica per il predicato di blocco applicato.The particular DML operation for the applied block predicate. AFTER specifica che il predicato viene valutato in base ai valori delle righe dopo l'esecuzione dell'operazione DML (INSERT o UPDATE).AFTER specifies the predicate is evaluated on the row values after the DML operation was carried out (INSERT or UPDATE). BEFORE specifica che il predicato viene valutato in base ai valori delle righe prima dell'esecuzione dell'operazione DML (UPDATE o DELETE).BEFORE specifies the predicate is evaluated on the row values before the DML operation is carried out (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.

Non è possibile applicare ALTER all'operazione per un predicato di blocco applicato, perché l'operazione viene usata per identificare in modo univoco il predicato.You can't ALTER the operation for an applied block predicate because the operation is used to uniquely identify the predicate. In alternativa, è necessario eliminare il predicato e aggiungerne uno nuovo per la nuova operazione.Instead, you must drop the predicate and add a new one for the new operation.

WITH ( STATE = { ON | OFF } )WITH ( 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.

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 the security policy shouldn't 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_nametable_schema_name.table_name
È la tabella di destinazione per il predicato di sicurezza applicato.Is the target table for the applied security predicate. 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

L'istruzione ALTER SECURITY POLICY è nell'ambito di una transazione.The ALTER SECURITY POLICY statement is in a transaction's scope. L'esecuzione del rollback della transazione comporta il rollback anche per l'istruzione.If the transaction is rolled back, the statement is also rolled back.

Quando si usano le funzioni di predicato con tabelle ottimizzate per la memoria, i criteri di sicurezza devono includere SCHEMABINDING e usare l'hint per la compilazioneWITH NATIVE_COMPILATION.When using predicate functions with memory-optimized tables, security policies must include SCHEMABINDING and use the WITH NATIVE_COMPILATION compilation hint. L'argomento SCHEMABINDING non può essere modificato con l'istruzione ALTER perché si applica a tutti i predicati.The SCHEMABINDING argument can't be changed with the ALTER statement because it applies to all predicates. Per modificare l'associazione dello schema, è necessario eliminare e ricreare i criteri di sicurezza.To change schema binding, you must drop and recreate the security policy.

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.As such, a READ UNCOMMITTED query can see transient values that will be rolled back.

AutorizzazioniPermissions

Richiede l'autorizzazione ALTER ANY SECURITY POLICY.Requires the ALTER ANY SECURITY POLICY permission.

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

Negli esempi seguenti viene illustrato l'uso della sintassi di CREATE SECURITY POLICY .The following examples demonstrate the use of the ALTER 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. Aggiunta di un altro predicato a un criterioAdding an additional predicate to a policy

La sintassi seguente modifica un criterio di sicurezza, aggiungendo un predicato del filtro per la tabella mytable.The following syntax alters a security policy, adding a filter predicate on the mytable table.

ALTER SECURITY POLICY pol1   
    ADD FILTER PREDICATE schema_preds.SecPredicate(column1)   
    ON myschema.mytable;  

B.B. Abilitazione di un criterio esistenteEnabling an existing policy

L'esempio seguente usa la sintassi di ALTER per abilitare un criterio di sicurezza.The following example uses the ALTER syntax to enable a security policy.

ALTER SECURITY POLICY pol1 WITH ( STATE = ON );  

C.C. Aggiunta ed eliminazione di più predicatiAdding and dropping multiple predicates

La sintassi seguente modifica un criterio di sicurezza, aggiungendo i predicati del filtro per le tabelle mytable1 e mytable3 e rimuovendo il predicato del filtro per la tabella mytable2.The following syntax alters a security policy, adding filter predicates on the mytable1 and mytable3 tables, and removing the filter predicate on the mytable2 table.

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.D. Modifica il predicato in una tabellaChanging the predicate on a table

La sintassi seguente modifica il predicato del filtro esistente nella tabella mytable per farla diventare la funzione SecPredicate2.The following syntax changes the existing filter predicate on the mytable table to be the SecPredicate2 function.

ALTER SECURITY POLICY pol1  
    ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)  
        ON myschema.mytable;  

E.E. Modifica di un predicato di bloccoChanging a block predicate

Modifica della funzione del predicato di blocco per un'operazione su una tabella.Changing the block predicate function for an operation on a table.

ALTER SECURITY POLICY rls.SecPol  
    ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId) 
    ON dbo.Sales AFTER INSERT;  

Vedere ancheSee Also

Sicurezza a livello di riga Row-Level Security
CREATE SECURITY POLICY (Transact-SQL) CREATE 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)