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

Применимо к: SQL Server 2016 (13.x) и более поздних версий Azure SQL Database Управляемый экземпляр SQL Azure

Для понимания безопасности применительно к темпоральным таблицам важно понять принципы безопасности, касающиеся темпоральных таблиц. Изучив эти принципы безопасности, можно приступить к рассмотрению вопросов безопасности относительно инструкций CREATE TABLE, ALTER TABLEи SELECT .

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

В следующей таблице описаны принципы безопасности, применимые к темпоральным таблицам.

Принцип Description
Включение и отключение системного управления версиями требует наивысших прав на затронутые объекты Для включения и отключения SYSTEM_VERSIONING необходимо разрешение CONTROL как для текущей, так и для прежней таблицы
Данные за прошедший период нельзя изменить напрямую Если параметр SYSTEM_VERSIONING включен (ON), пользователи не могут изменять данные за прошедший период независимо от своих фактических разрешений для текущей или прежней таблицы. Это относится к изменениям как данных, так и схемы.
Для отправки запросов к данным за прошедший период требуются разрешения SELECT для прежней таблицы То, что у пользователя есть разрешение SELECT для текущей таблицы, не означает, что у него есть разрешение SELECT для прежней таблицы.
Аудит показывает операции, затрагивающие прежнюю таблицу определенными способами: Параметры аудита из текущей таблицы не применяются к таблице журнала автоматически. Для таблицы журнала аудит необходимо включать явно.

После включения аудита для таблицы журнала будут регулярно фиксироваться все попытки прямого доступа к данным (независимо от того, были ли они успешными).

SELECT с расширением темпорального запроса показывает, что прежняя таблица была затронута соответствующей операцией.

Темпоральная таблицаCREATE/ALTER предоставляет информацию о том, что проверка разрешения выполняется также для прежней таблицы. Файл аудита будет содержать дополнительную запись для прежней таблицы.

Операции DML над текущей таблицей показывают, что прежняя таблица была затронута, но additional_info предоставляет необходимый контекст (DML — это результат system_versioning).

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

Если параметр SYSTEM_VERSIONING включен (ON), операции изменения схемы ограничены.

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

Операция Текущая таблица Прежняя таблица
DROP TABLE Запрещено Запрещено
ALTER TABLE…SWITCH PARTITION Только SWITCH IN (см. раздел Секционирование с использованием темпоральных таблиц) Только SWITCH OUT (см. раздел Секционирование с использованием темпоральных таблиц)
ALTER TABLE…DROP PERIOD Запрещено -
ALTER TABLE…ADD PERIOD - Запрещено

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

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

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

Компонент Создание новой прежней таблицы Повторное использование существующей прежней таблицы
Требуемое разрешение РазрешениеCREATE TABLE в базе данных

РазрешениеALTER на схемы, в которых создаются текущие таблицы и прежней таблицы
РазрешениеCREATE TABLE в базе данных

РазрешениеALTER на схемы, в которых будет создана текущая таблица

РазрешениеCONTROL для прежней таблицы, указанной как часть инструкции CREATE TABLE , которая создает темпоральную таблицу
Аудит Аудит показывает, что пользователи пытались создать два объекта. Операция может завершиться ошибкой из-за отсутствия разрешений на создание таблицы в базе данных или из-за отсутствия разрешений на изменение схем для любой из таблиц. Аудит показывает, что темпоральная таблица была создана. Операция может завершиться ошибкой из-за отсутствия разрешения на создание таблицы в базе данных, из-за отсутствия разрешений на изменение схемы для темпоральной таблицы или из-за отсутствия разрешений на прежнюю таблицу.

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

Компонент Создание новой прежней таблицы Повторное использование существующей прежней таблицы
Требуемое разрешение РазрешениеCONTROL в базе данных

РазрешениеCREATE TABLE в базе данных

РазрешениеALTER на схемы, в которых создается прежняя таблица
РазрешениеCONTROL на исходную таблицу, которая изменяется

РазрешениеCONTROL на прежнюю таблицу, указанную как часть инструкции ALTER TABLE
Аудит Аудит показывает, что темпоральная таблица была изменена и в то же время была создана прежняя таблица. Операция может завершиться ошибкой из-за отсутствия разрешений на создание таблицы в базе данных, из-за отсутствия разрешений на изменение схемы для прежней таблицы или из-за отсутствия разрешений на изменение темпоральной таблицы. Аудит показывает, что темпоральная таблица была изменена, но для операции потребовался доступ к прежней таблице. Операция может завершиться ошибкой из-за отсутствия разрешений на прежнюю таблицу или из-за отсутствия разрешений на текущую таблицу.

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

РазрешениеSELECT не изменяется для инструкций SELECT , которые не влияют на прежнюю таблицу. Для инструкций SELECT , влияющих на прежнюю таблицу, требуется разрешение SELECT как на текущую, так и на прежнюю таблицу.

См. также: