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
SQL Database i Förhandsversion av Microsoft Fabric
Skapar en säkerhetsprincip för säkerhet på radnivå.
              
              
              Transact-SQL syntaxkonventioner
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
Namnet på säkerhetsprincipen. Namn på säkerhetsprinciper måste följa reglerna för identifierare och måste vara unika i databasen och för dess schema.
schema_name
Är namnet på det schema som säkerhetsprincipen tillhör. schema_name krävs på grund av schemabindning.
[ FILTER | BLOCKERA ]
Typen 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
Är den infogade tabellvärdefunktionen som ska användas som predikat och som kommer att tillämpas vid frågor mot en måltabell. Högst ett säkerhetspredikat kan definieras för en viss DML-åtgärd mot en viss tabell. Funktionen infogat tabellvärde måste ha skapats med hjälp av SCHEMABINDING alternativet .
{ column_name | uttryck }
Ett kolumnnamn eller uttryck som används som en parameter för funktionen för säkerhetspredikat. Valfri kolumn i måltabellen kan användas. Ett uttryck kan bara innehålla konstanter, inbyggda skalärfunktioner, operatorer och kolumner från måltabellen. Ett kolumnnamn eller uttryck måste anges för varje parameter i funktionen.
table_schema_name.table_name
Är måltabellen som säkerhetspredikatet ska tillämpas på. 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ärd som blockpredikatet ska tillämpas för. 
              AFTER anger att predikatet ska utvärderas på värdena för raderna efter att DML-åtgärden utfördes (INSERT eller UPDATE). 
              BEFORE anger att predikatet ska utvärderas på värdena för raderna innan DML-åtgärden utförs (UPDATE eller DELETE). Om ingen åtgärd anges gäller predikatet för alla åtgärder.
[ 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.
[ SCHEMABINDING = { ON | OFF } ]
Anger om alla predikatfunktioner i principen måste skapas med alternativet SCHEMABINDING . Som standard är ON den här inställningen och alla funktioner måste skapas med SCHEMABINDING.
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
Är måltabellen som säkerhetspredikatet ska tillämpas på. Flera inaktiverade säkerhetsprinciper kan riktas mot en enskild tabell, men endast en kan aktiveras vid en viss tidpunkt.
Remarks
När du använder predikatfunktioner med minnesoptimerade tabeller måste du inkludera SCHEMABINDING och använda kompileringstipset WITH NATIVE_COMPILATION .
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.
Permissions
Kräver behörigheten ALTER ANY SECURITY POLICY och ALTER i schemat.
Dessutom krävs följande behörigheter för varje predikat som läggs till:
SELECT- och REFERENCES-behörigheter för funktionen som används som predikat.
BEHÖRIGHETEN REFERENSER för måltabellen som är bunden till principen.
BEHÖRIGHET FÖR REFERENSER för varje kolumn från måltabellen som används som argument.
Examples
I följande exempel visas hur syntaxen CREATE SECURITY POLICY används. Ett exempel på ett fullständigt säkerhetsprincipscenario finns i Säkerhet på radnivå.
A. Skapa en säkerhetsprincip
Följande syntax skapar en säkerhetsprincip med ett filterpredikat för dbo.Customer tabellen och lämnar säkerhetsprincipen inaktiverad.
CREATE SECURITY POLICY [FederatedSecurityPolicy]   
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])   
ON [dbo].[Customer];  
B. Skapa en princip som påverkar flera tabeller
Följande syntax skapar en säkerhetsprincip med tre filterpredikat i tre olika tabeller och aktiverar säkerhetsprincipen.
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. Skapa en princip med flera typer av säkerhetspredikat
Lägga till både ett filterpredikat och ett blockpredikat i dbo.Sales tabellen.
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;