Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Azure SQL Database
Azure SQL Managed Instance
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
Wijzigt een beveiligingsbeleid.
Transact-SQL syntaxis-conventies
Syntaxis
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 } } ]
Argumenten
security_policy_name
De naam van het beveiligingsbeleid. Namen van beveiligingsbeleid moeten voldoen aan de regels voor id's en moeten uniek zijn binnen de database en het bijbehorende schema.
schema_name
De naam van het schema waartoe het beveiligingsbeleid behoort. schema_name is vereist vanwege schemabinding.
[ FILTER | BLOCK ] **
Het type beveiligingspredicaat voor de functie die is gebonden aan de doeltabel.
FILTER prediceert op de achtergrond de rijen die beschikbaar zijn voor leesbewerkingen.
BLOCK prediceert expliciet schrijfbewerkingen die de predicaatfunctie schenden.
tvf_schema_name. security_predicate_function_name
De inline-tabelwaardefunctie die u als predicaat gebruikt en die u afdwingt bij query's voor een doeltabel. U kunt maximaal één beveiligingspredicaat definiëren voor een bepaalde DML-bewerking voor een bepaalde tabel. Maak de functie inlinetabelwaarde met behulp van de SCHEMABINDING optie.
{ column_name | argumenten }
De kolomnaam of expressie die wordt gebruikt als parameters voor de functie beveiligingspredicaat. Kolommen in de doeltabel kunnen worden gebruikt als argumenten voor de predicaatfunctie. Expressies die letterlijke, ingebouwde en expressies bevatten die gebruikmaken van rekenkundige operatoren, kunnen worden gebruikt.
table_schema_name.table_name
De doeltabel voor het beveiligingspredicaat. Meerdere uitgeschakelde beveiligingsbeleidsregels kunnen zich richten op één tabel voor een bepaalde DML-bewerking, maar er kan op elk gewenst moment slechts één worden ingeschakeld.
<block_dml_operation>
De specifieke DML-bewerking voor het toegepaste blokpredicaat.
AFTER geeft aan dat het predicaat wordt geëvalueerd op de rijwaarden nadat de DML-bewerking is uitgevoerd (INSERT of UPDATE).
BEFORE geeft aan dat het predicaat wordt geëvalueerd op de rijwaarden voordat de DML-bewerking wordt uitgevoerd (UPDATE of DELETE). Als er geen bewerking is opgegeven, is het predicaat van toepassing op alle bewerkingen.
U kunt de bewerking voor een toegepast blokpredicaat niet wijzigen omdat de bewerking wordt gebruikt om het predicaat uniek te identificeren. In plaats daarvan moet u het predicaat verwijderen en een nieuwe toevoegen voor de nieuwe bewerking.
WITH ( STATE = { ON | UIT } )
Hiermee kunt u het beveiligingsbeleid in- of uitschakelen om de beveiligingspredicaten af te dwingen voor de doeltabellen. Als het beveiligingsbeleid dat wordt gemaakt niet is opgegeven, is ingeschakeld.
NIET VOOR REPLICATIE
Geeft aan dat het beveiligingsbeleid niet moet worden uitgevoerd wanneer een replicatieagent het doelobject wijzigt. Zie Het gedrag van triggers en beperkingen tijdens synchronisatie beheren (replicatie Transact-SQL programmeren) voor meer informatie.
table_schema_name.table_name
De doeltabel voor het toegepaste beveiligingspredicaat. Meerdere uitgeschakelde beveiligingsbeleidsregels kunnen zich richten op één tabel, maar er kan op elk gewenst moment slechts één worden ingeschakeld.
Opmerkingen
De instructie ALTER SECURITY POLICY bevindt zich in het bereik van een transactie. Als de transactie wordt teruggedraaid, wordt de verklaring ook teruggedraaid.
Wanneer u predicaatfuncties gebruikt met tabellen die zijn geoptimaliseerd voor geheugen, moet het beveiligingsbeleid de WITH NATIVE_COMPILATION compilatiehint bevatten SCHEMABINDING en gebruiken. Het SCHEMABINDING argument kan niet worden gewijzigd met de ALTER instructie omdat het van toepassing is op alle predicaten. Als u schemabinding wilt wijzigen, moet u het beveiligingsbeleid verwijderen en opnieuw maken.
Blokpredicaten worden geëvalueerd nadat de bijbehorende DML-bewerking is uitgevoerd. Als zodanig is er een gevaar dat een READ UNCOMMITTED-query tijdelijke waarden kan zien die worden teruggedraaid.
Machtigingen
Hiervoor is de machtiging ALTER ANY SECURITY POLICY vereist.
Daarnaast zijn de volgende machtigingen vereist voor elk predicaat dat wordt toegevoegd:
-
SELECTenREFERENCESmachtigingen voor de functie die wordt gebruikt als predicaat. -
REFERENCESmachtiging voor de doeltabel die is gebonden aan het beleid. -
REFERENCESmachtiging voor elke kolom uit de doeltabel die als argumenten wordt gebruikt.
Voorbeelden
In de volgende voorbeelden ziet u het gebruik van de ALTER SECURITY POLICY syntaxis. Zie Beveiliging op rijniveau voor een voorbeeld van een volledig beveiligingsbeleidsscenario.
Eén. Een extra predicaat toevoegen aan een beleid
Met de volgende syntaxis wordt een beveiligingsbeleid gewijzigd, waarbij een filterpredicaat wordt toegevoegd aan de mytable tabel.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate(column1)
ON myschema.mytable;
B. Een bestaand beleid inschakelen
In het volgende voorbeeld wordt de syntaxis ALTER gebruikt om een beveiligingsbeleid in te schakelen.
ALTER SECURITY POLICY pol1 WITH ( STATE = ON );
C. Meerdere predicaten toevoegen en verwijderen
De volgende syntaxis wijzigt een beveiligingsbeleid, voegt filterpredicaten toe aan de mytable1 en tabellen en mytable3 verwijdert het filterpredicaat in de mytable2 tabel.
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. Het predicaat voor een tabel wijzigen
Met de volgende syntaxis wordt het bestaande filterpredicaat voor de myschema.mytable tabel gewijzigd in de SecPredicate2 functie.
ALTER SECURITY POLICY pol1
ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)
ON myschema.mytable;
E. Een blokpredicaat wijzigen
De blokpredicaatfunctie voor een bewerking in een tabel wijzigen.
ALTER SECURITY POLICY rls.SecPol
ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId)
ON dbo.Sales AFTER INSERT;