Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
SQL Analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL 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;