Kommentar
Å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.
Applies to: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
SQL-analysslutpunkten i Microsoft Fabric
Warehouse i databasen Microsoft Fabric
SQL i Microsoft Fabric
Skapar en säkerhetsprincip för row-level security i SQL Database Engine.
Säkerhet på radnivå i Fabric Data Warehouse fungerar på samma sätt som andra SQL-Database Engine produkter. Mer information och exempel på säkerhet på radnivå i Fabric Data Warehouse eller SQL-analysslutpunkten finns i Säkerhet på Fabric datalager.
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 vara unika i databasen och dess schema.
schema_name
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 ska bindas till måltabellen.
-
FILTERpredikat filtrerar tyst de rader som är tillgängliga för läsåtgärder. -
BLOCKpredikat blockerar uttryckligen skrivåtgärder som bryter mot predikatfunktionen.
tvf_schema_name.security_predikat_funktionsnamn_
Den infogade tabellvärdefunktion som ska användas som predikat och som 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
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.
[ TILLSTÅND = { PÅ | FEL } ]
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 | FEL } ]
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 Styr beteendet för utlösare och begränsningar under synkronisering (replikering Transact-SQL programmering).
[ table_schema_name. ] table_name
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örighet och ALTER ANY SECURITY POLICYALTER behörighet för schemat.
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.
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;