ALTER SECURITY POLICY (Transact-SQL)

Si applica a: SQL Server 2016 (13.x) e versioni successive database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Modifica un criterio di sicurezza.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

security_policy_name

Nome del criterio di sicurezza. 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.

schema_name

Nome dello schema a cui appartiene il criterio di sicurezza. schema_name è necessario per l'associazione allo schema.

[ FILTER | BLOCK ]

Tipo del predicato di sicurezza per la funzione da associare alla tabella di destinazione. FILTER predicati filtrano automaticamente le righe disponibili per le operazioni di lettura. BLOCK predicati bloccano in modo esplicito le operazioni di scrittura che violano la funzione predicato.

tvf_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. È possibile definire al massimo un predicato di sicurezza per una specifica operazione DML su una determinata tabella. Creare la funzione valore tabella inline usando l'opzione SCHEMABINDING .

{ column_name | arguments }

Espressione o nome di colonna usato come parametro per la funzione di predicato di sicurezza. Tutte le colonne nella tabella di destinazione possono essere usate come argomenti per la funzione di predicato. È possibile usare espressioni che includono valori letterali, valori predefiniti ed espressioni che usano operatori aritmetici.

table_schema_name.table_name

È la tabella di destinazione per il predicato di sicurezza. A una singola tabella possono fare riferimento più criteri di sicurezza disabilitati per un'operazione DML specifica, ma è possibile abilitarne solo uno.

<block_dml_operation>

Operazione DML specifica per il predicato di blocco applicato. AFTER specifica che il predicato viene valutato sui valori di riga dopo l'esecuzione dell'operazione DML (INSERT o UPDATE). BEFORE specifica che il predicato viene valutato sui valori di riga prima che venga eseguita l'operazione DML (UPDATE o DELETE). Se non è specificata alcuna operazione, il predicato verrà applicato a tutte le operazioni.

Non è possibile applicare ALTER all'operazione per un predicato di blocco applicato, perché l'operazione viene usata per identificare in modo univoco il predicato. In alternativa, è necessario eliminare il predicato e aggiungerne uno nuovo per la nuova operazione.

WITH ( STATE = { ON | OFF } )

Abilita o disabilita il criterio di sicurezza per l'applicazione dei relativi predicati di sicurezza alle tabelle di destinazione. Se non specificato, il criterio di sicurezza creato è abilitato.

NOT FOR REPLICATION

Indica che il criterio di sicurezza non deve essere eseguito quando un agente di replica modifica l'oggetto di destinazione. Per altre informazioni, vedere Controllare il comportamento di trigger e vincoli durante la sincronizzazione (programmazione Transact-SQL della replica).

table_schema_name.table_name

È la tabella di destinazione per il predicato di sicurezza applicato. A una singola tabella possono fare riferimento più criteri di sicurezza disabilitati, ma è possibile abilitarne solo uno.

Osservazioni:

L'istruzione ALTER SECURITY POLICY è nell'ambito di una transazione. L'esecuzione del rollback della transazione comporta il rollback anche per l'istruzione.

Quando si usano funzioni di predicato con tabelle ottimizzate per la memoria, i criteri di sicurezza devono includere SCHEMABINDING e usare l'hint di WITH NATIVE_COMPILATION compilazione. L'argomento SCHEMABINDING non può essere modificato con l'istruzione ALTER perché si applica a tutti i predicati. Per modificare l'associazione dello schema, è necessario eliminare e ricreare i criteri di sicurezza.

I predicati di blocco vengono valutati dopo l'esecuzione dell'operazione DML corrispondente. Di conseguenza, è possibile che una query READ UNCOMMITTED possa visualizzare i valori temporanei di cui verrà eseguito il rollback.

Autorizzazioni

È necessaria l'autorizzazione ALTER ANY SECURITY POLICY.

Inoltre, per ogni predicato che viene aggiunto sono richieste le autorizzazioni seguenti:

  • Le autorizzazzioni SELECT REFERENCES per la funzione usata come predicato.
  • L’autorizzazione REFERENCES per la tabella di destinazione associata ai criteri.
  • L’autorizzazione REFERENCES per ogni colonna della tabella di destinazione usata come argomento.

Esempi

Negli esempi seguenti viene illustrato l'uso della ALTER SECURITY POLICY sintassi . Per un esempio di scenario completo dei criteri di sicurezza, vedere Sicurezza a livello di riga.

R. Aggiungere un predicato aggiuntivo a un criterio

La sintassi seguente modifica un criterio di sicurezza, aggiungendo un predicato del filtro per la tabella mytable.

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

B. Abilitare un criterio esistente

L'esempio seguente usa la sintassi di ALTER per abilitare un criterio di sicurezza.

ALTER SECURITY POLICY pol1 WITH ( STATE = ON );  

C. Aggiungere ed eliminare più predicati

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.

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. Modificare il predicato in una tabella

La sintassi seguente modifica il predicato di filtro esistente nella myschema.mytable tabella in modo che sia la SecPredicate2 funzione .

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

E. Modificare un predicato di blocco

Modifica della funzione del predicato di blocco per un'operazione su una tabella.

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