Udostępnij za pomocą


TWORZENIE ZASAD ZABEZPIECZEŃ (Transact-SQL)

Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL Analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Tworzy zasady zabezpieczeń dla zabezpieczeń na poziomie wiersza.

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 identyfikatorów i muszą być unikatowe w bazie danych i jej schematu.

schema_name

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

[ FILTER | BLOKUJ ]

Typ predykatu zabezpieczeń funkcji powiązanej 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

Jest funkcją 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

Jest tabelą docelową, 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 Kontrolowanie zachowania wyzwalaczy i ograniczeń podczas synchronizacji (replikacja Transact-SQL programowanie).

[ table_schema_name. ] table_name

Jest tabelą docelową, 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 zapytanie READ UNCOMMITTED może zobaczyć wartości przejściowe, które zostaną wycofane.

Permissions

Wymaga uprawnienia ALTER ANY SECURITY POLICY i ALTER w schemacie.

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

  • UPRAWNIENIA SELECT i REFERENCES funkcji używanej jako predykat.

  • Uprawnienie REFERENCES w tabeli docelowej powiązanej z zasadami.

  • Uprawnienie REFERENCES dla każdej kolumny z tabeli docelowej używane 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;