临时表安全性

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例

要了解适用于临时表的安全性,理解适用于临时表的安全主体尤为重要。 在了解这些安全原则后,你就可以准备深入研究关于 CREATE TABLEALTER TABLESELECT 语句的安全性了。

安全原则

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

原则 说明
启用/禁用系统版本控制需要有对受影响对象的最高权限 启用和禁用 SYSTEM_VERSIONING 需要有对当前和历史记录表的 CONTROL 权限
不能直接修改历史记录数据 当 SYSTEM_VERSIONING 为 ON 时,用户不能更改历史记录数据,不管他们对当前和历史记录表的实际权限是什么。 这包括数据和架构修改。
查询历史记录数据需要有对历史记录表的 SELECT 权限。 仅仅因为用户具有对当前表的 SELECT 权限并不意味着他们有对历史记录表的 SELECT 权限。
审核曲面操作会以特定方式影响历史记录表: 当前表中的审核设置不会自动应用于历史记录表。 需要为历史记录表显式启用审核。

启用后,对历史记录表的审核会定期捕获对访问数据的所有直接尝试(不管它们是否成功)。

具有临时查询扩展的SELECT 显示历史记录表受到了此操作的影响。

CREATE/ALTER 临时表也会公开历史记录表上的权限检查信息。 审核文件将包含历史记录表的其他记录。

对当前表曲面进行 DML 操作,历史记录表受到了影响,但 additional_info 提供必要的上下文(DML 是 system_versioning 的结果)。

执行架构操作

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

禁止的 ALTER 架构操作

Operation 当前表 历史记录表
DROP TABLE 已禁止 已禁止
ALTER TABLE...SWITCH PARTITION 仅 SWITCH IN(请参阅 临时表分区 仅 SWITCH OUT(请参阅 临时表分区
ALTER TABLE…DROP PERIOD 已禁止 -
ALTER TABLE…ADD PERIOD - 已禁止

允许的 ALTER TABLE 操作

Operation 当前 历史记录
ALTER TABLE...REBUILD 已允许(独立) 已允许(独立)
CREATE INDEX 已允许(独立) 已允许(独立)
CREATE STATISTICS 已允许(独立) 已允许(独立)

CREATE Temporal TABLE 语句的安全性

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

在其中创建当前和历史记录表的架构上的ALTER 权限
数据库中的CREATE TABLE 权限

将在其中创建当前表的架构上的ALTER 权限

指定其作为创建临时表的CONTROL 语句的一部分的历史记录表上的 CONTROL 权限
审核 审核显示用户尝试创建两个对象。 操作可能由于缺少在数据库中创建表的权限或缺少改变任一表的架构的权限而失败。 审核显示临时表已创建。 操作可能由于缺少在数据库中创建表的权限、缺少改变临时表的架构的权限或缺少对历史记录表的权限而失败。

ALTER Temporal TABLE SET (SYSTEM_VERSIONING ON/OFF) 语句的安全性

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

数据库中的CREATE TABLE 权限

在其中创建历史记录表的架构上的ALTER 权限
被更改的原始表上的CONTROL 权限

指定其作为CONTROL 语句的一部分的历史记录表上的 CONTROL 权限
审核 审核显示临时表已更改,同时创建了历史记录表。 操作可能由于缺少在数据库中创建表的权限、缺少改变历史记录表的架构的权限或缺少修改临时表的权限而失败。 审核显示临时表已更改,但操作需要对历史记录表的访问权限。 操作可能由于缺少对历史记录表或当前表的权限而失败。

SELECT 语句的安全性

SELECT 权限对不影响历史记录表的 SELECT 语句不变。 对于影响历史记录表的 SELECT 语句,在当前表和历史记录表上都需要 SELECT 权限。

另请参阅