Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
SQL Analytics-slutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
Ändrar en säkerhetsprincip.
Transact-SQL syntaxkonventioner
Syntax
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 } } ]
Argumentpunkter
security_policy_name
Namnet på säkerhetsprincipen. Namn på säkerhetsprinciper måste uppfylla reglerna för identifierare och måste vara unika i databasen och för dess schema.
schema_name
Namnet på det schema som säkerhetsprincipen tillhör. schema_name krävs på grund av schemabindning.
[ FILTER | BLOCK ] **
Typ av säkerhetspredikat för funktionen som är bunden till måltabellen.
FILTER predikat filtrerar tyst de rader som är tillgängliga för läsåtgärder.
BLOCK predikat blockerar uttryckligen skrivåtgärder som bryter mot predikatfunktionen.
tvf_schema_name. security_predicate_function_name
Den infogade tabellvärdefunktion som du använder som predikat och som du framtvingar vid frågor mot en måltabell. Som mest kan du definiera ett säkerhetspredikat för en viss DML-åtgärd mot en viss tabell. Skapa funktionen infogat tabellvärde med hjälp av SCHEMABINDING alternativet .
{ column_name | argument }
Kolumnnamnet eller uttrycket som används som parametrar för funktionen för säkerhetspredikat. Alla kolumner i måltabellen kan användas som argument för predikatfunktionen. Uttryck som innehåller literaler, inbyggda uttryck och uttryck som använder aritmetiska operatorer kan användas.
table_schema_name.table_name
Måltabellen för säkerhetspredikatet. Flera inaktiverade säkerhetsprinciper kan rikta in sig på en enskild tabell för en viss DML-åtgärd, men endast en kan aktiveras vid en viss tidpunkt.
<block_dml_operation>
Den specifika DML-åtgärden för det tillämpade blockpredikatet.
AFTER anger att predikatet utvärderas på radvärdena efter att DML-åtgärden utfördes (INSERT eller UPDATE).
BEFORE anger att predikatet utvärderas på radvärdena innan DML-åtgärden utförs (UPDATE eller DELETE). Om ingen åtgärd anges gäller predikatet för alla åtgärder.
Du kan inte ändra åtgärden för ett tillämpat blockpredikat eftersom åtgärden används för att unikt identifiera predikatet. I stället måste du släppa predikatet och lägga till ett nytt för den nya åtgärden.
MED ( STATE = { ON | OFF } )
Aktiverar eller inaktiverar säkerhetsprincipen från att framtvinga dess säkerhetspredikat mot måltabellerna. Om inte anges är den säkerhetsprincip som skapas aktiverad.
INTE FÖR REPLIKERING
Anger att säkerhetsprincipen inte ska köras när en replikeringsagent ändrar målobjektet. Mer information finns i Kontrollera beteendet för utlösare och begränsningar under synkronisering (replikering Transact-SQL programmering).
table_schema_name.table_name
Måltabellen för det tillämpade säkerhetspredikatet. Flera inaktiverade säkerhetsprinciper kan riktas mot en enskild tabell, men endast en kan aktiveras vid en viss tidpunkt.
Anmärkningar
INSTRUKTIONEN ALTER SECURITY POLICY finns i en transaktions omfång. Om transaktionen återställs, återställs även instruktionen.
När du använder predikatfunktioner med minnesoptimerade tabeller måste säkerhetsprinciper inkludera SCHEMABINDING och använda kompileringstipset WITH NATIVE_COMPILATION . Argumentet SCHEMABINDING kan inte ändras med -instruktionen ALTER eftersom det gäller för alla predikat. Om du vill ändra schemabindningen måste du släppa och återskapa säkerhetsprincipen.
Blockpredikat utvärderas efter att motsvarande DML-åtgärd har körts. Därför finns det risk för att en READ UNCOMMITTED-fråga kan se tillfälliga värden som kommer att återställas.
Behörigheter
Kräver behörigheten ALTER ANY SECURITY POLICY.
Dessutom krävs följande behörigheter för varje predikat som läggs till:
-
SELECTochREFERENCESbehörigheter för funktionen som används som predikat. -
REFERENCESbehörighet på måltabellen som är bunden till principen. -
REFERENCESbehörighet för varje kolumn från måltabellen som används som argument.
Exempel
I följande exempel visas hur syntaxen ALTER SECURITY POLICY används. Ett exempel på ett fullständigt säkerhetsprincipscenario finns i Säkerhet på radnivå.
A. Lägga till ytterligare ett predikat i en princip
Följande syntax ändrar en säkerhetsprincip och lägger till ett filterpredikat i mytable tabellen.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate(column1)
ON myschema.mytable;
B. Aktivera en befintlig princip
I följande exempel används ALTER-syntaxen för att aktivera en säkerhetsprincip.
ALTER SECURITY POLICY pol1 WITH ( STATE = ON );
C. Lägga till och ta bort flera predikat
Följande syntax ändrar en säkerhetsprincip, lägger till filterpredikat för tabellerna mytable1 och mytable3 och tar bort filterpredikatet i mytable2 tabellen.
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. Ändra predikatet i en tabell
Följande syntax ändrar det befintliga filterpredikatet i myschema.mytable tabellen till funktionen SecPredicate2 .
ALTER SECURITY POLICY pol1
ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)
ON myschema.mytable;
E. Ändra ett blockpredikat
Ändra funktionen blockpredicate för en åtgärd i en tabell.
ALTER SECURITY POLICY rls.SecPol
ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId)
ON dbo.Sales AFTER INSERT;