Безопасность темпоральных таблицTemporal Table Security

Применимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздние версии ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) and later ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

Для понимания безопасности применительно к темпоральным таблицам важно понять принципы безопасности, касающиеся темпоральных таблиц.To understand security as it applies to temporal tables, it is important to understand the security principals that apply to temporal tables. Изучив эти принципы безопасности, можно приступить к рассмотрению вопросов безопасности относительно инструкций CREATE TABLE, ALTER TABLEи SELECT .After you understand these security principles, you are ready to dive into the security around the CREATE TABLE, ALTER TABLE, and SELECT statements.

Принципы безопасностиSecurity Principles

В следующей таблице описаны принципы безопасности, применимые к темпоральным таблицам.The following table describes the security principles that apply to temporal tables:

ПринципPrinciple DescriptionDescription
Включение и отключение системного управления версиями требует наивысших прав на затронутые объектыEnabling/disabling system-versioning requires highest privileges on affected objects Для включения и отключения SYSTEM_VERSIONING необходимо разрешение CONTROL как для текущей, так и для прежней таблицыEnabling and disabling SYSTEM_VERSIONING requires CONTROL permission on both the current and the history table
Данные за прошедший период нельзя изменить напрямуюHistory data cannot be modified directly Если параметр SYSTEM_VERSIONING включен (ON), пользователи не могут изменять данные за прошедший период независимо от своих фактических разрешений для текущей или прежней таблицы.When SYSTEM_VERSIONING is ON users cannot alter history data regardless of their actual permissions on current or the history table. Это относится к изменениям как данных, так и схемы.This includes both data and schema modifications.
Для отправки запросов к данным за прошедший период требуются разрешения SELECT для прежней таблицыQuerying history data requires SELECT permission on the history table То, что у пользователя есть разрешение SELECT для текущей таблицы, не означает, что у него есть разрешение SELECT для прежней таблицы.Merely because a user has SELECT permission on the current table does not mean that they have SELECT permission on the history table.
Аудит показывает операции, затрагивающие прежнюю таблицу определенными способами:Audit surfaces operations affecting history table in specific ways: Параметры аудита из текущей таблицы не применяются к таблице журнала автоматически.Auditing settings from the current table are not automatically applied to the history table. Для таблицы журнала аудит необходимо включать явно.Auditing needs to be enabled explicitly for history table.

После включения аудита для таблицы журнала будут регулярно фиксироваться все попытки прямого доступа к данным (независимо от того, были ли они успешными).Once enabled, auditing on history table regularly captures all direct attempts to access the data (regardless if they were successful or not).

SELECT с расширением темпорального запроса показывает, что прежняя таблица была затронута соответствующей операцией.SELECT with temporal query extension shows that history table was affected with that operation.

Темпоральная таблицаCREATE/ALTER предоставляет информацию о том, что проверка разрешения выполняется также для прежней таблицы.CREATE/ALTER temporal table expose information that permission check happens on history table as well. Файл аудита будет содержать дополнительную запись для прежней таблицы.Audit file will contain additional record for history table.

Операции DML над текущей таблицей показывают, что прежняя таблица была затронута, но additional_info предоставляет необходимый контекст (DML — это результат system_versioning).DML operations on current table surface that history table was affected but additional_info provides necessary context (DML was result of system_versioning).

Выполнение операций со схемойPerforming Schema Operations

Если параметр SYSTEM_VERSIONING включен (ON), операции изменения схемы ограничены.When SYSTEM_VERSIONING is set to ON, schema modification operations are limited.

Запрещенные операции ALTER над схемойDisallowed ALTER schema operations

ОперацияOperation Текущая таблицаCurrent Table Прежняя таблицаHistory Table
DROP TABLEDROP TABLE ЗапрещеноDisallowed ЗапрещеноDisallowed
ALTER TABLE…SWITCH PARTITIONALTER TABLE...SWITCH PARTITION Только SWITCH IN (см. раздел Секционирование с использованием темпоральных таблиц)SWITCH IN only (see Partitioning with Temporal Tables) Только SWITCH OUT (см. раздел Секционирование с использованием темпоральных таблиц)SWITCH OUT only (see Partitioning with Temporal Tables)
ALTER TABLE…DROP PERIODALTER TABLE...DROP PERIOD ЗапрещеноDisallowed -
ALTER TABLE…ADD PERIODALTER TABLE...ADD PERIOD - ЗапрещеноDisallowed

Разрешенные операции ALTER TABLEAllowed ALTER TABLE operations

ОперацияOperation ТекущийCurrent ЖурналHistory
ALTER TABLE...REBUILDALTER TABLE...REBUILD Допускается (независимо друг от друга)Allowed (independently) Допускается (независимо друг от друга)Allowed (independently)
CREATE INDEXCREATE INDEX Допускается (независимо друг от друга)Allowed (independently) Допускается (независимо друг от друга)Allowed (independently)
CREATE STATISTICSCREATE STATISTICS Допускается (независимо друг от друга)Allowed (independently) Допускается (независимо друг от друга)Allowed (independently)

Безопасность инструкции CREATE Temporal TABLESecurity of the CREATE Temporal TABLE Statement

КомпонентFeature Создание новой прежней таблицыCreate New History Table Повторное использование существующей прежней таблицыReuse Existing History Table
Требуемое разрешениеPermission Required РазрешениеCREATE TABLE в базе данныхCREATE TABLE permission in the database

РазрешениеALTER на схемы, в которых создаются текущие таблицы и прежней таблицыALTER permission on the schemas into which the current and history tables are being created
РазрешениеCREATE TABLE в базе данныхCREATE TABLE permission in the database

РазрешениеALTER на схемы, в которых будет создана текущая таблицаALTER permission on the schema in which the current table will be created.

РазрешениеCONTROL для прежней таблицы, указанной как часть инструкции CREATE TABLE , которая создает темпоральную таблицуCONTROL permission on the history table specified as part of the CREATE TABLE statement creating the temporal table
АудитAudit Аудит показывает, что пользователи пытались создать два объекта.Audit shows that users attempted to create two objects. Операция может завершиться ошибкой из-за отсутствия разрешений на создание таблицы в базе данных или из-за отсутствия разрешений на изменение схем для любой из таблиц.Operation may fail due to lack of permissions to create a table in the database or due to lack of permissions to alter schemas for either table. Аудит показывает, что темпоральная таблица была создана.Audit shows that temporal table was created. Операция может завершиться ошибкой из-за отсутствия разрешения на создание таблицы в базе данных, из-за отсутствия разрешений на изменение схемы для темпоральной таблицы или из-за отсутствия разрешений на прежнюю таблицу.Operation may fail due to lack of permission to create a table in the database, due to lack of permissions to alter the schema for the temporal table, or to lack of permissions on the history table.

Безопасность инструкции ALTER Temporal TABLE SET (SYSTEM_VERSIONING ON/OFF)Security of the ALTER Temporal TABLE SET (SYSTEM_VERSIONING ON/OFF) Statement

КомпонентFeature Создание новой прежней таблицыCreate New History Table Повторное использование существующей прежней таблицыReuse Existing History Table
Требуемое разрешениеPermission Required РазрешениеCONTROL в базе данныхCONTROL permission in the database

РазрешениеCREATE TABLE в базе данныхCREATE TABLE permission in the database

РазрешениеALTER на схемы, в которых создается прежняя таблицаALTER permission on the schemas into which the history table is being created
РазрешениеCONTROL на исходную таблицу, которая изменяетсяCONTROL permission on the original table which is altered

РазрешениеCONTROL на прежнюю таблицу, указанную как часть инструкции ALTER TABLECONTROL permission on the history table specified as part of the ALTER TABLE statement
АудитAudit Аудит показывает, что темпоральная таблица была изменена и в то же время была создана прежняя таблица.Audit shows that the temporal table was altered and the history table was created at the same time. Операция может завершиться ошибкой из-за отсутствия разрешений на создание таблицы в базе данных, из-за отсутствия разрешений на изменение схемы для прежней таблицы или из-за отсутствия разрешений на изменение темпоральной таблицы.Operation may fail due to lack of permissions to create a table in the database, due to lack of permissions to alter schema for history table, or due to lack of permission to modify temporal table. Аудит показывает, что темпоральная таблица была изменена, но для операции потребовался доступ к прежней таблице.Audit shows that temporal table was altered, but operation required access to history table. Операция может завершиться ошибкой из-за отсутствия разрешений на прежнюю таблицу или из-за отсутствия разрешений на текущую таблицу.Operation may fail due to lack of permissions on the history table or lack of permissions on the current table.

Безопасность инструкции SELECTSecurity of SELECT Statement

РазрешениеSELECT не изменяется для инструкций SELECT , которые не влияют на прежнюю таблицу.SELECT permission is unchanged for SELECT statements that do not affect the history table. Для инструкций SELECT , влияющих на прежнюю таблицу, требуется разрешение SELECT как на текущую, так и на прежнюю таблицу.For SELECT statements that affect the history table, SELECT permission is required on both the current table and the history table.

См. также:See Also