Sdílet prostřednictvím


VYTVOŘENÍ BEZPEČNOSTNÍ POLITIKY (Transact-SQL)

Platí na: SQL Server 2016 (13.x) a pozdější verze Azure SQL DatabaseAzure SQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Vytvoří zásadu zabezpečení pro zabezpečení na úrovni řádků.

Transact-SQL konvence syntaxe

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

Název zásady zabezpečení. Názvy zásad zabezpečení musí splňovat pravidla pro identifikátory a musí být jedinečné v rámci databáze a pro jeho schéma.

schema_name

Je název schématu, ke kterému patří zásady zabezpečení. schema_name se vyžaduje kvůli vazbě schématu.

[ FILTR | BLOK ]

Typ predikátu zabezpečení pro funkci, která je svázaná s cílovou tabulkou. FILTER predikáty bezobslužně filtrují řádky, které jsou k dispozici pro operace čtení. BLOCK predikáty explicitně blokují operace zápisu, které porušují predikát funkce.

tvf_schema_name.security_predicate_function_name

Je vložená funkce hodnoty tabulky, která se použije jako predikát a která se bude vynucovat při dotazech na cílovou tabulku. Pro konkrétní operaci DML s konkrétní tabulkou je možné definovat maximálně jeden predikát zabezpečení. Funkce hodnoty vložené tabulky musí být vytvořena pomocí SCHEMABINDING této možnosti.

{ column_name | výraz }

Název sloupce nebo výraz použitý jako parametr pro funkci predikátu zabezpečení. Můžete použít libovolný sloupec v cílové tabulce. Výraz může obsahovat pouze konstanty, integrované skalární funkce, operátory a sloupce z cílové tabulky. Pro každý parametr funkce je potřeba zadat název sloupce nebo výraz.

table_schema_name.table_name

Je cílová tabulka, na kterou se použije predikát zabezpečení. Několik zakázaných zásad zabezpečení může cílit na jednu tabulku pro konkrétní operaci DML, ale v daném okamžiku je možné povolit pouze jednu.

block_dml_operation

Konkrétní operace DML, pro kterou se použije predikát bloku. AFTER určuje, že predikát bude vyhodnocen na hodnotách řádků po provedení operace DML (INSERT nebo UPDATE). BEFORE určuje, že predikát bude vyhodnocen na hodnotách řádků před provedením operace DML (UPDATE nebo DELETE). Pokud není zadána žádná operace, predikát se použije pro všechny operace.

[ STAV = { ON | VYPNUTO } ]

Povolí nebo zakáže zásady zabezpečení vynucování predikátů zabezpečení pro cílové tabulky. Pokud není zadána zásada zabezpečení, která se vytváří, je povolená.

[ SCHEMABINDING = { ON | VYPNUTO } ]

Určuje, jestli se všechny predikátové funkce v zásadách musí vytvořit pomocí SCHEMABINDING této možnosti. Ve výchozím nastavení je ON toto nastavení a všechny funkce musí být vytvořeny pomocí SCHEMABINDING.

NE PRO REPLIKACI

Označuje, že zásady zabezpečení by se neměly spouštět při úpravě cílového objektu agentem replikace. Další informace naleznete v tématu Řízení chování aktivačních událostí a omezení během synchronizace (replikace Transact-SQL programování).

[ table_schema_name. ] table_name

Je cílová tabulka, na kterou se použije predikát zabezpečení. Několik zakázaných zásad zabezpečení může cílit na jednu tabulku, ale v daném okamžiku je možné povolit jenom jednu.

Remarks

Při použití funkcí predikátu s tabulkami optimalizovanými pro paměť musíte zahrnout SCHEMABINDING a použít nápovědu WITH NATIVE_COMPILATION pro kompilaci.

Predikáty bloku se vyhodnocují po provedení odpovídající operace DML. Proto existuje nebezpečí, že dotaz READ UNCOMMITTED může zobrazit přechodné hodnoty, které budou vráceny zpět.

Permissions

Vyžaduje oprávnění ALTER ANY SECURITY POLICY a ALTER pro schéma.

Kromě toho jsou pro každý přidaný predikát vyžadována následující oprávnění:

  • Oprávnění SELECT a REFERENCES pro funkci, která se používá jako predikát.

  • ODKAZY oprávnění k cílové tabulce, která je svázaná se zásadou.

  • REFERENCE oprávnění ke každému sloupci z cílové tabulky použité jako argumenty.

Examples

Následující příklady ukazují použití CREATE SECURITY POLICY syntaxe. Příklad kompletního scénáře zásad zabezpečení najdete v tématu Zabezpečení na úrovni řádků.

A. Vytvoření zásad zabezpečení

Následující syntaxe vytvoří zásadu zabezpečení s predikátem filtru pro dbo.Customer tabulku a ponechá zásadu zabezpečení zakázanou.

CREATE SECURITY POLICY [FederatedSecurityPolicy]   
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])   
ON [dbo].[Customer];  

B. Vytvoření zásady, která má vliv na více tabulek

Následující syntaxe vytvoří zásadu zabezpečení se třemi predikáty filtru ve třech různých tabulkách a povolí zásady zabezpečení.

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. Vytvoření zásady s více typy predikátů zabezpečení

Přidání predikátu filtru i predikátu bloku do dbo.Sales tabulky

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;