Dela via


SKAPA SÄKERHETSPRINCIP (Transact-SQL)

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceSQL Analytics-slutpunkt i Microsoft FabricWarehouse i Microsoft FabricSQL 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;