Udostępnij za pośrednictwem


TWORZENIE ZASAD ZABEZPIECZEŃ (Transact-SQL)

Applies to: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse w Microsoft FabricSQL database in Microsoft Fabric

Tworzy zasady zabezpieczeń dla zabezpieczeń w Database Engine SQL.

Zabezpieczenia na poziomie wiersza w Fabric Data Warehouse działają podobnie jak inne produkty Database Engine SQL. Aby uzyskać więcej informacji i przykłady zabezpieczeń na poziomie wiersza w Fabric Data Warehouse lub punkcie końcowym analizy SQL, zobacz Zabezpieczenia na poziomie Fabric magazynowania danych.

Transact-SQL konwencje składni

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

Nazwa zasad zabezpieczeń. Nazwy zasad zabezpieczeń muszą być zgodne z regułami dotyczącymi identyfikatorów i być unikatowe w bazie danych i jej schemacie.

schema_name

Nazwa schematu, do którego należą zasady zabezpieczeń. schema_name jest wymagany z powodu powiązania schematu.

[ FILTER | BLOKUJ ]

Typ predykatu zabezpieczeń funkcji do powiązania z tabelą docelową.

  • FILTER Predykaty w trybie dyskretnym filtrują wiersze, które są dostępne do odczytu operacji.
  • BLOCK Predykaty jawnie blokują operacje zapisu naruszające funkcję predykatu.

tvf_schema_name.security_predicate_function_name

Funkcja wartości tabeli wbudowanej, która będzie używana jako predykat i która będzie wymuszana na zapytaniach względem tabeli docelowej. Dla określonej tabeli można zdefiniować co najwyżej jeden predykat zabezpieczeń dla określonej operacji DML. Funkcja wartości tabeli wbudowanej musi zostać utworzona SCHEMABINDING przy użyciu opcji .

{ column_name | wyrażenie }

Nazwa kolumny lub wyrażenie używane jako parametr funkcji predykatu zabezpieczeń. Można użyć dowolnej kolumny w tabeli docelowej. Wyrażenie może zawierać tylko stałe, wbudowane w funkcje skalarne, operatory i kolumny z tabeli docelowej. Dla każdego parametru funkcji należy określić nazwę kolumny lub wyrażenie.

table_schema_name.table_name

Tabela docelowa, do której zostanie zastosowany predykat zabezpieczeń. Wiele wyłączonych zasad zabezpieczeń może być przeznaczonych dla pojedynczej tabeli dla określonej operacji DML, ale w danym momencie można włączyć tylko jedną tabelę.

block_dml_operation

Określona operacja DML, dla której zostanie zastosowany predykat bloku. AFTER określa, że predykat zostanie obliczony na wartości wierszy po wykonaniu operacji DML (INSERT lub UPDATE). BEFORE określa, że predykat zostanie obliczony na wartości wierszy przed wykonaniem operacji DML (UPDATE lub DELETE). Jeśli żadna operacja nie zostanie określona, predykat będzie stosowany do wszystkich operacji.

[ STAN = { ON | WYŁĄCZ } ]

Włącza lub wyłącza zasady zabezpieczeń przed wymuszaniem predykatów zabezpieczeń względem tabel docelowych. Jeśli nie określono zasad zabezpieczeń, które są tworzone, są włączone.

[ SCHEMABINDING = { ON | WYŁĄCZ } ]

Wskazuje, czy wszystkie funkcje predykatu w zasadach muszą zostać utworzone z opcją SCHEMABINDING . Domyślnie to ustawienie to ON i wszystkie funkcje muszą być tworzone za pomocą SCHEMABINDINGpolecenia .

NIE DOTYCZY REPLIKACJI

Wskazuje, że zasady zabezpieczeń nie powinny być wykonywane, gdy agent replikacji modyfikuje obiekt docelowy. Aby uzyskać więcej informacji, zobacz Control the Behavior of Triggers and Constraints During Synchronization (Replication Transact-SQL Programming) (

[ table_schema_name. ] table_name

Tabela docelowa, do której zostanie zastosowany predykat zabezpieczeń. Wiele wyłączonych zasad zabezpieczeń może być przeznaczonych dla jednej tabeli, ale w danym momencie można włączyć tylko jedną z nich.

Remarks

W przypadku używania funkcji predykatu z tabelami zoptymalizowanymi pod kątem pamięci należy uwzględnić SCHEMABINDING wskazówkę kompilacji i użyć WITH NATIVE_COMPILATION jej.

Predykaty blokowe są oceniane po wykonaniu odpowiedniej operacji DML. W związku z tym istnieje niebezpieczeństwo, że READ UNCOMMITTED zapytanie może zobaczyć wartości przejściowe, które zostaną wycofane.

Permissions

ALTER ANY SECURITY POLICY Wymaga uprawnień i ALTER uprawnień w schemacie.

Ponadto dla każdego dodanego predykatu są wymagane następujące uprawnienia:

  • SELECT i REFERENCES uprawnienia do funkcji używanej jako predykat.

  • REFERENCES uprawnienie do tabeli docelowej powiązanej z zasadami.

  • REFERENCES uprawnienia do każdej kolumny z tabeli docelowej używanej jako argumenty.

Examples

W poniższych przykładach pokazano użycie CREATE SECURITY POLICY składni. Aby zapoznać się z przykładem kompletnego scenariusza zasad zabezpieczeń, zobacz Zabezpieczenia na poziomie wiersza.

A. Tworzenie zasad zabezpieczeń

Poniższa składnia tworzy zasady zabezpieczeń z predykatem filtru dbo.Customer dla tabeli i pozostawia wyłączone zasady zabezpieczeń.

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

B. Tworzenie zasad mających wpływ na wiele tabel

Poniższa składnia tworzy zasady zabezpieczeń z trzema predykatami filtrów w trzech różnych tabelach i włącza zasady zabezpieczeń.

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. Tworzenie zasad z wieloma typami predykatów zabezpieczeń

Dodawanie zarówno predykatu filtru, jak i predykatu blokowego dbo.Sales do tabeli.

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;