対象者:SQL Server 2016 (13.x) およびそれ以降のバージョン
Azure SQL Database
Azure SQL Managed Instance
SQL Database in Microsoft Fabric
テンポラルテーブルを保護するには、それに適用されるセキュリティ原則を理解しなければなりません。 これらの原則を理解すれば、 CREATE TABLE、 ALTER TABLE、 SELECT の声明にセキュリティを適用できます。
セキュリティの原則
次の表は、テンポラル テーブルに適用されるセキュリティ原則についてまとめたものです。
| 原理 | 説明 |
|---|---|
| 有効/無効なシステムによるバージョン管理を切り替えるには、影響を受けるオブジェクトに対する最高の権限が必要になる |
SYSTEM_VERSIONING の有効/無効を切り替えるには、現行テーブルと履歴テーブルの両方の CONTROL 権限が必要になります。 |
| 履歴データを直接変更できない |
SYSTEM_VERSIONINGがONされると、ユーザーは現在または履歴テーブルの権限に関わらず履歴データを変更できません。 この制限には、データとスキーマの変更が含まれます。
1 |
履歴データにクエリを実行するには、履歴テーブルの SELECT 権限が必要になる |
現在のテーブルの SELECT アクセス許可を持つユーザーは、履歴テーブルに対する SELECT 権限を自動的に持ちません。 |
| 監査により特定の方法で履歴テーブルに影響を与える操作が明らかになる | 現在のテーブルからの監査設定は、履歴テーブルに自動的には適用されません。 履歴テーブルに対して監査を明示的に有効にする必要があります。 有効化後は、履歴テーブルの監査が成功したかどうかに関わらず、データへの直接的なアクセスをすべて記録します。SELECT 時間クエリ拡張を用いて、この操作が履歴テーブルに影響を与えたことを示します。CREATE/ALTER テンポラル テーブルでは、履歴テーブルでも権限チェックが行われる情報が公開されます。 監査ファイルには、履歴テーブルの追加レコードが含まれます。現在のテーブルに対するデータ操作言語(DML)の操作は、その操作が履歴テーブルに影響を与えたことを示していますが、必要な文脈 additional_information 提供します(DMLは SYSTEM_VERSIONINGの結果です)。 |
1 現在のテーブルと履歴テーブルにALTER権限を持ち、現在のテーブルの列を削除すると、SYSTEM_VERSIONINGONであっても、関連する履歴テーブルの列も削除されます。
スキーマ操作を実行する
SYSTEM_VERSIONING が ON に設定されているとき、スキーマ変更操作は限定されます。
許可されていないALTER SCHEMA操作
| Operation | 現在のテーブル | 履歴テーブル |
|---|---|---|
DROP TABLE |
許可されていない | 禁止 |
ALTER TABLE...SWITCH PARTITION |
SWITCH IN のみ (「テンポラル テーブルでのパーティション分割」参照) |
SWITCH OUT のみ (「テンポラル テーブルでのパーティション分割」参照) |
ALTER TABLE...DROP PERIOD |
禁止 | N/A |
ALTER TABLE...ADD PERIOD |
N/A | 禁止 |
許可された ALTER TABLE 操作
| Operation | Current | History |
|---|---|---|
ALTER TABLE...REBUILD |
許可 (個別で) | 許可 (個別で) |
CREATE INDEX |
許可 (個別で) | 許可 (個別で) |
CREATE STATISTICS |
許可 (個別で) | 許可 (個別で) |
CREATE テンポラル テーブル ステートメントのセキュリティ
| Feature | 新しい履歴テーブルを作成する | 既存の履歴テーブルを再利用する |
|---|---|---|
| 許可が必要です | データベースの CREATE TABLE 権限ALTER 現在テーブルと履歴テーブルを作成するスキーマの権限 |
データベースの CREATE TABLE 権限ALTER 現在のテーブルを作成するスキーマの権限。テンポラル テーブルを作成する CONTROL ステートメントの一部として指定される履歴テーブルの CREATE TABLE 権限。 |
| Audit | 監査により、ユーザーが 2 つのオブジェクトを作成しようとしたことが示されます。 この操作は、データベース内のテーブルを作成する権限がなかったり、どちらのテーブルのスキーマを変更する権限がなかったりしても失敗することがあります。 | 監査により、テンポラル テーブルが作成されたことが示されます。 データベースにテーブルを作成する権限がない、テンポラル テーブルのスキーマを変更する権限がない、または履歴テーブルに対する権限がないため、操作が失敗することがあります。 |
ALTER時時テーブルのセキュリティ SET (SYSTEM_VERSIONING)文
| Feature | 新しい履歴テーブルを作成する | 既存の履歴テーブルを再利用する |
|---|---|---|
| 許可が必要です | データベースの CONTROL 権限。データベースの CREATE TABLE 権限。ALTER 履歴テーブルを作成するスキーマの権限。 |
CONTROL 変更する元のテーブルに対する権限。CONTROL ステートメントの一部として指定された履歴テーブルに対する ALTER TABLE 権限。 |
| Audit | 監査により、テンポラル テーブルが変更され、同時に履歴テーブルが作成されたことが示されます。 この操作は、データベース内でテーブルを作成する権限の欠如、履歴テーブルのスキーマを変更する権限の欠如、または時間テーブルを変更する権限の欠如により失敗することがあります。 | 監査により、テンポラル テーブルが変更されたが、操作には履歴テーブルへのアクセス許可が必要であったことが示されます。 履歴テーブルに対する権限がないため、あるいは現行テーブルに対する権限がないため、操作が失敗することがあります。 |
SELECT ステートメントのセキュリティ
履歴テーブルに影響を与えない SELECT ステートメントの SELECT 権限は変更されません。 履歴テーブルに影響を与える SELECT 文については、現在のテーブルと履歴テーブルの両方に SELECT 権限が必要です。