Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Applies to: SQL Server 2016 (13.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse w Microsoft Fabric
SQL 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ą.
-
FILTERPredykaty w trybie dyskretnym filtrują wiersze, które są dostępne do odczytu operacji. -
BLOCKPredykaty 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
[ 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:
SELECTiREFERENCESuprawnienia do funkcji używanej jako predykat.REFERENCESuprawnienie do tabeli docelowej powiązanej z zasadami.REFERENCESuprawnienia 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;