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 FabricSQL-database in Microsoft Fabric Preview
Hiermee maakt u een beveiligingsbeleid voor beveiliging op rijniveau.
              
              
              Transact-SQL syntaxis-conventies
Syntax
CREATE SECURITY POLICY [schema_name. ] security_policy_name    
    { ADD [ FILTER | BLOCK ] } PREDICATE tvf_schema_name.security_predicate_function_name   
      ( { column_name | expression } [ , ...n] ) ON table_schema_name. table_name    
      [ <block_dml_operation> ] , [ , ...n] 
    [ WITH ( STATE = { ON | OFF }  [,] [ SCHEMABINDING = { ON | OFF } ] ) ]  
    [ NOT FOR REPLICATION ] 
[;]  
  
<block_dml_operation>  
    [ { AFTER { INSERT | UPDATE } }   
    | { BEFORE { UPDATE | DELETE } } ]  
Arguments
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
Is 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
Is de inline-tabelwaardefunctie die wordt gebruikt als predicaat en die wordt afgedwongen bij query's voor een doeltabel. Maximaal één beveiligingspredicaat kan worden gedefinieerd voor een bepaalde DML-bewerking voor een bepaalde tabel. De inline-tabelwaardefunctie moet zijn gemaakt met behulp van de SCHEMABINDING optie.
{ column_name | expression }
Een kolomnaam of expressie die wordt gebruikt als parameter voor de functie beveiligingspredicaat. Elke kolom in de doeltabel kan worden gebruikt. Een expressie kan alleen constanten bevatten, ingebouwde scalaire functies, operators en kolommen uit de doeltabel. Voor elke parameter van de functie moet een kolomnaam of expressie worden opgegeven.
table_schema_name.table_name
Is de doeltabel waarop het beveiligingspredicaat wordt toegepast. 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 waarvoor het blokpredicaat wordt toegepast. 
              AFTER geeft aan dat het predicaat wordt geëvalueerd op de waarden van de rijen nadat de DML-bewerking is uitgevoerd (INSERT of UPDATE). 
              BEFORE geeft aan dat het predicaat wordt geëvalueerd op de waarden van de rijen voordat de DML-bewerking wordt uitgevoerd (UPDATE of DELETE). Als er geen bewerking is opgegeven, is het predicaat van toepassing op alle bewerkingen.
[ STATUS = { AAN | 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.
[ SCHEMABINDING = { ON | UIT } ]
Hiermee wordt aangegeven of alle predicaatfuncties in het beleid moeten worden gemaakt met de SCHEMABINDING optie. Deze instelling is ON standaard en alle functies moeten worden gemaakt met SCHEMABINDING.
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
Is de doeltabel waarop het beveiligingspredicaat wordt toegepast. Meerdere uitgeschakelde beveiligingsbeleidsregels kunnen zich richten op één tabel, maar er kan op elk gewenst moment slechts één worden ingeschakeld.
Remarks
Wanneer u predicaatfuncties gebruikt met tabellen die zijn geoptimaliseerd voor geheugen, moet u de WITH NATIVE_COMPILATION hint voor compilatie opnemen SCHEMABINDING en gebruiken.
Blokpredicaten worden geëvalueerd nadat de bijbehorende DML-bewerking is uitgevoerd. Daarom is er een gevaar dat een READ UNCOMMITTED-query tijdelijke waarden kan zien die worden teruggedraaid.
Permissions
Vereist de machtiging ALTER ANY SECURITY POLICY en ALTER-machtiging voor het schema.
Daarnaast zijn de volgende machtigingen vereist voor elk predicaat dat wordt toegevoegd:
SELECT- en VERWIJZINGEN-machtigingen voor de functie die wordt gebruikt als predicaat.
VERWIJZINGEN-machtiging voor de doeltabel die is gebonden aan het beleid.
DE MACHTIGING VERWIJZINGEN voor elke kolom uit de doeltabel die als argumenten wordt gebruikt.
Examples
In de volgende voorbeelden ziet u het gebruik van de CREATE SECURITY POLICY syntaxis. Zie Beveiliging op rijniveau voor een voorbeeld van een volledig beveiligingsbeleidsscenario.
A. Een beveiligingsbeleid maken
Met de volgende syntaxis maakt u een beveiligingsbeleid met een filterpredicaat voor de dbo.Customer tabel en blijft het beveiligingsbeleid uitgeschakeld.
CREATE SECURITY POLICY [FederatedSecurityPolicy]   
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])   
ON [dbo].[Customer];  
B. Een beleid maken dat van invloed is op meerdere tabellen
Met de volgende syntaxis maakt u een beveiligingsbeleid met drie filterpredicaten in drie verschillende tabellen en schakelt u het beveiligingsbeleid in.
CREATE SECURITY POLICY [FederatedSecurityPolicy]   
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([CustomerId])   
    ON [dbo].[Customer],  
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([VendorId])   
    ON [dbo].[ Vendor],  
ADD FILTER PREDICATE [rls].[fn_securitypredicate2]([WingId])   
    ON [dbo].[Patient]  
WITH (STATE = ON);  
C. Een beleid maken met meerdere typen beveiligingspredicaten
Zowel een filterpredicaat als een blokpredicaat toevoegen aan de dbo.Sales tabel.
CREATE SECURITY POLICY rls.SecPol  
    ADD FILTER PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales,  
    ADD BLOCK PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales AFTER INSERT;