時態表安全性

適用於: SQL Server 2016 (13.x) 和更新版本 Azure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

要保護時序表,你必須了解適用於它們的安全原則。 了解這些原則後,您就可以將安全性套用至 ALTER TABLESELECTCREATE TABLE 陳述式。

安全原則

下表描述適用於時態表的安全性原則︰

準則 Description
在受影響物件上啟用/停用系統版本控制需要最高權限 啟用或停用 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 Disallowed Disallowed
ALTER TABLE...SWITCH PARTITION 僅限 SWITCH IN(請參閱 使用時態資料表進行分割 僅限 SWITCH OUT(請參閱 使用時態資料表進行分割
ALTER TABLE...DROP PERIOD Disallowed N/A
ALTER TABLE...ADD PERIOD N/A Disallowed

允許的 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 權限。