时态表安全性

适用于: SQL Server 2016 (13.x) 及以后版本 Azure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 数据库

要保护时序表,你必须理解适用于它们的安全原则。 理解这些原则后,你就可以将安全性应用于 ALTER TABLESELECTCREATE TABLE 语句。

安全原则

下表描述适用于临时表的安全原则:

原则 说明
启用/禁用系统版本控制需要有对受影响对象的最高权限 启用和禁用 SYSTEM_VERSIONING 需要在当前表和历史表上均具有 CONTROL 权限。
不能直接修改历史记录数据 SYSTEM_VERSIONINGON时,用户无论在当前或历史表上的权限如何,都不能更改历史数据。 此限制包括数据和架构修改。 1
查询历史记录数据需要有对历史记录表的 SELECT 权限 对当前表具有 SELECT 权限的用户不会自动对历史记录表具有 SELECT 权限。
审计揭示了以特定方式影响历史表的操作 当前表中的审核设置不会自动应用于历史记录表。 你必须为历史表明确启用审计功能。 启用后,历史表上的审计会记录所有直接访问数据的尝试,无论是否成功。

SELECT 带有时间查询扩展,显示该操作影响了历史表。

CREATE/ALTER 时态表表明,权限检查也会在历史记录表上进行。 审计文件包含历史表的附加记录。

对当前表执行的数据操作语言 (DML) 操作表明,该操作影响了历史表,但 additional_information 提供了必要的上下文信息(DML 是 SYSTEM_VERSIONING 的结果)。

1 如果你对当前表和历史表都有 ALTER 权限,并且你在当前表中丢弃了一列,那么历史表中关联的列也会被丢弃,即使 SYSTEM_VERSIONINGON

执行架构操作

SYSTEM_VERSIONING 设置为 ON 时,架构修改操作将受限制。

禁止的 ALTER SCHEMA 操作

运算 当前表 历史记录表
DROP TABLE 已禁止 已禁止
ALTER TABLE...SWITCH PARTITION SWITCH IN 仅限于(请参阅使用时态表进行分区 SWITCH OUT 仅限于(请参阅使用时态表进行分区
ALTER TABLE...DROP PERIOD 禁止 N/A
ALTER TABLE...ADD PERIOD N/A 已禁止

允许的 ALTER TABLE 操作

运算 Current History
ALTER TABLE...REBUILD 允许(独立) 允许(独立)
CREATE INDEX 允许(独立) 允许(独立)
CREATE STATISTICS 允许(独立) 允许(独立)

CREATE 时态表语句的安全性

Feature 创建新的历史记录表 重用现有的历史记录表
所需权限 数据库中的 CREATE TABLE 权限

对创建当前表和历史表所在的架构的 ALTER 权限
数据库中的 CREATE TABLE 权限

对创建当前表所在架构的 ALTER 权限。

CONTROL 权限,针对在创建时序表的 CREATE TABLE 语句中指定的历史表。
Audit 审核显示用户尝试创建两个对象。 操作可能因缺乏创建数据库表的权限,或缺乏修改任一表模式的权限而失败。 审核显示已创建时态表。 操作可能由于缺少在数据库中创建表的权限、缺少改变时态表架构的权限或缺少对历史记录表的权限而失败。

ALTER 时态表 SET (SYSTEM_VERSIONING) 语句的安全性

Feature 创建新的历史记录表 重用现有的历史记录表
所需权限 数据库中的 CONTROL 权限。

数据库中的 CREATE TABLE 权限。

对创建历史表的所在架构的 ALTER 权限。
对所修改的原始表的 CONTROL 权限。

CONTROL 权限,针对作为 ALTER TABLE 语句一部分指定的历史表。
Audit 审核显示临时表已更改,同时创建了历史记录表。 该操作可能因缺乏创建数据库表的权限、修改历史表模式的权限,或修改时序表的权限而失败。 审核显示已更改时态表,但操作需要对历史记录表的访问权限。 操作可能由于缺少对历史记录表或当前表的权限而失败。

SELECT 语句的安全性

对于不影响历史记录表的 SELECT 语句,SELECT 权限保持不变。 对于 SELECT 影响历史表的语句,你需要对当前表和历史表同时获得 SELECT 权限。