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;