Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Относится к: SQL Server 2016 (13.x) и более поздние версии
Azure SQL Database
AzureSQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQLdatabase in Microsoft Fabric
Создает политику безопасности для безопасности на уровне строк.
Соглашения о синтаксисе Transact-SQL
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
Имя политики безопасности. Имена политик безопасности должны удовлетворять правилам построения идентификаторов и должны быть уникальными в пределах базы данных и схемы.
schema_name
Имя схемы, которой принадлежит политика безопасности. Аргумент schema_name необходим из-за привязки к схеме.
[ ФИЛЬТР | БЛОКИРОВКА ]
Тип предиката безопасности для функции, которая привязывается к целевой таблице.
FILTER предикаты автоматически фильтруют строки, доступные для операций чтения.
BLOCK предикаты явно блокируют операции записи, которые нарушают функцию предиката.
tvf_schema_name.security_predicate_function_name
Это встроенная функция, возвращающая табличное значение, которое будет использоваться в качестве предиката и применяться при запросах к целевой таблице. Для конкретной операции DML в определенной таблице можно задать не более одного предиката безопасности. Встроенная функция табличного значения должна быть создана с помощью SCHEMABINDING параметра.
{ имя_столбца | выражение }
Имя столбца или выражение, используемое в качестве параметров функции предиката безопасности. Можно использовать любой столбец в целевой таблице. Выражение может содержать только константы, встроенные в скалярные функции, операторы и столбцы из целевой таблицы. Для каждого параметра функции нужно указать имя столбца или выражения.
table_schema_name.table_name
Представляет целевую таблицу, к которой будет применяться предикат безопасности. Для одной таблицы для конкретной операции DML могут быть предназначены несколько отключенных политик безопасности, но только одна может быть включена в любой момент времени.
block_dml_operation
Конкретная операция DML, для которой применяется предикат блокировки.
AFTER указывает, что предикат будет оцениваться по значениям строк после выполнения операции DML (INSERT или UPDATE).
BEFORE указывает, что предикат будет вычисляться по значениям строк перед выполнением операции DML (UPDATE или DELETE). Если операция не указана, предикат будет применяться ко всем операциям.
[ СОСТОЯНИЕ = { ON | ВЫКЛЮЧЕНО } ]
Включает или отключает политику безопасности для обеспечения применения ее предикатов безопасности в отношении целевых таблиц. Если этот аргумент не указан, создаваемая политика безопасности будет отключена.
[ SCHEMABINDING = { ON | ВЫКЛЮЧЕНО } ]
Указывает, должны ли создаваться все функции предиката в политике с параметром SCHEMABINDING . По умолчанию этот параметр предназначен ON для создания SCHEMABINDINGвсех функций.
НЕ ДЛЯ РЕПЛИКАЦИИ
Указывает, что политика безопасности не должна выполняться, когда агент репликации изменяет целевой объект. Дополнительные сведения см. в статье Управление поведением триггеров и ограничений во время синхронизации (программирование репликации на языке Transact-SQL).
[ table_schema_name. ] table_name
Представляет целевую таблицу, к которой будет применяться предикат безопасности. Для одной таблицы могут быть предназначены несколько отключенных политик безопасности, но только одна может быть включена в любой момент времени.
Remarks
При использовании функций предиката с оптимизированными для памяти таблицами необходимо включить SCHEMABINDING и использовать подсказку WITH NATIVE_COMPILATION компиляции.
Предикаты блокировки вычисляются после выполнения соответствующей операции DML. Поэтому существует опасность того, что запрос READ UNCOMMITTED может видеть временные значения, которые будут откатированы.
Permissions
Требуется разрешение ALTER ANY SECURITY POLICY и разрешение ALTER в схеме.
Кроме того, для каждого добавляемого предиката требуются следующие разрешения:
РазрешенияSELECT и REFERENCES для функции используются как предикат.
РазрешениеREFERENCES для целевой таблицы, которая привязывается к политике.
РазрешениеREFERENCES для каждого столбца из целевой таблицы, используемого в качестве аргументов.
Examples
В следующих примерах показано использование синтаксиса CREATE SECURITY POLICY . Пример полного сценария политики безопасности см. в разделе "Безопасность на уровне строк".
A. Создание политики безопасности
Следующий синтаксис создает политику безопасности с предикатом фильтра для dbo.Customer таблицы и оставляет политику безопасности отключенной.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])
ON [dbo].[Customer];
B. Создание политики, которая влияет на несколько таблиц
Следующий синтаксис создает политику безопасности с тремя предикатами фильтров в трех разных таблицах и включает политику безопасности.
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. Создание политики с несколькими типами предикатов безопасности
Добавление предиката фильтра и предиката блока в таблицу dbo.Sales .
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;