適用対象:Sql Server 2016 (13.x) 以降のバージョン
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric Preview の SQL データベース
テンポラル テーブルに適用されるセキュリティを理解するには、テンポラル テーブルに適用されるセキュリティ原則を理解する必要があります。 これらのセキュリティ原則について理解したら、CREATE TABLE、ALTER TABLE、SELECT ステートメントのセキュリティの学習に入ることができます。
Security principles
次の表は、テンポラル テーブルに適用されるセキュリティ原則についてまとめたものです。
| Principle | Description |
|---|---|
| 有効/無効なシステムによるバージョン管理を切り替えるには、影響を受けるオブジェクトに対する最高の権限が必要になる |
SYSTEM_VERSIONING の有効/無効を切り替えるには、現行テーブルと履歴テーブルの両方の CONTROL 権限が必要になります。 |
| 履歴データを直接変更できない |
SYSTEM_VERSIONING が ON のときは、現行テーブルまたは履歴テーブルの実際の権限に関係なく、履歴データを変更することはできません。 この制限には、データとスキーマの変更が含まれます。
1 |
履歴データにクエリを実行するには、履歴テーブルの SELECT 権限が必要になる |
現在のテーブルの SELECT アクセス許可を持つユーザーは、履歴テーブルに対する SELECT 権限を自動的に持ちません。 |
| 監査により特定の方法で履歴テーブルに影響を与える操作が明らかになる | 現在のテーブルからの監査設定は、履歴テーブルに自動的には適用されません。 監査は、履歴テーブルに対して明示的に有効にする必要があります。 有効にすると、履歴テーブルの監査では、データにアクセスするための直接的な試みが定期的にすべて記録されます (成功/失敗に関係なく)。SELECT と一時的なクエリ拡張で、その操作で履歴テーブルが影響を受けたことが示されます。CREATE/ALTER テンポラル テーブルでは、履歴テーブルでも権限チェックが行われる情報が公開されます。 監査ファイルには、履歴テーブルの追加レコードが含まれます。現行テーブルの DML 操作で、履歴テーブルが影響を受けたが、 additional_information で必要なコンテキストが提供されることが判明します (DML は SYSTEM_VERSIONING の結果でした)。 |
1 現在のテーブルと履歴テーブルに対する ALTER 権限があり、現在のテーブルで列を削除すると、SYSTEM_VERSIONING が ONされている場合でも、履歴テーブル内の関連する列も削除されます。
スキーマ操作を実行する
SYSTEM_VERSIONING が ON に設定されているとき、スキーマ変更操作は限定されます。
許可されていない ALTER スキーマ操作
| Operation | Current table | History table |
|---|---|---|
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 操作
| Operation | Current | History |
|---|---|---|
ALTER TABLE...REBUILD |
Allowed (independently) | Allowed (independently) |
CREATE INDEX |
Allowed (independently) | Allowed (independently) |
CREATE STATISTICS |
Allowed (independently) | Allowed (independently) |
CREATE テンポラル テーブル ステートメントのセキュリティ
| Feature | 新しい履歴テーブルを作成する | 既存の履歴テーブルを再利用する |
|---|---|---|
| Permission required | データベースの CREATE TABLE 権限現行テーブルと履歴テーブルが作成されるスキーマの ALTER 権限 |
データベースの CREATE TABLE 権限現行テーブルが作成されるスキーマの ALTER 権限。テンポラル テーブルを作成する CONTROL ステートメントの一部として指定される履歴テーブルの CREATE TABLE 権限。 |
| Audit | 監査により、ユーザーが 2 つのオブジェクトを作成しようとしたことが示されます。 データベースにテーブルを作成する権限がないため、あるいはどちらかのテーブルのスキーマを変更する権限がないため、操作が失敗することがあります。 | 監査により、テンポラル テーブルが作成されたことが示されます。 データベースにテーブルを作成する権限がない、テンポラル テーブルのスキーマを変更する権限がない、または履歴テーブルに対する権限がないため、操作が失敗することがあります。 |
ALTER Temporal TABLE SET (SYSTEM_VERSIONING オン/オフ) ステートメントのセキュリティ
| Feature | 新しい履歴テーブルを作成する | 既存の履歴テーブルを再利用する |
|---|---|---|
| Permission required | データベースの CONTROL 権限。データベースの CREATE TABLE 権限。履歴テーブルが作成されるスキーマの ALTER 権限。 |
変更される元のテーブルの CONTROL 権限。CONTROL ステートメントの一部として指定される履歴テーブルの ALTER TABLE 権限。 |
| Audit | 監査により、テンポラル テーブルが変更され、同時に履歴テーブルが作成されたことが示されます。 データベースにテーブルを作成する権限がないため、履歴テーブルのスキーマを変更する権限がないため、あるいはテンポラル テーブルを変更する権限がないため、この操作が失敗することがあります。 | 監査により、テンポラル テーブルが変更されたが、操作には履歴テーブルへのアクセス許可が必要であったことが示されます。 履歴テーブルに対する権限がないため、あるいは現行テーブルに対する権限がないため、操作が失敗することがあります。 |
SELECT ステートメントのセキュリティ
履歴テーブルに影響を与えない SELECT ステートメントの SELECT 権限は変更されません。 履歴テーブルに影響を与える SELECT ステートメントについては、現行テーブルと履歴テーブルの両方で SELECT 権限が必要になります。