動作変更の管理

このドキュメントでは、特定の 動作変更バンドル が、アカウントで有効になっているかどうかを確認する方法と、それを有効または無効にする方法について説明します。

概要

Snowflakeは、定期的にスケジュールされた リリース に含まれるバンドルで動作の変更を毎月実装します。各動作変更バンドルのテスト期間およびオプトアウト期間中に、アカウントでバンドルを有効または無効にできます。このドキュメントでは、特定のバンドルがアカウントで有効になっているかどうかを確認する方法と、それを有効または無効にする方法について説明します。

このドキュメントでは、動作変更バンドルの名前は YYYY_NN の形式です。現在利用可能な動作変更バンドルの名前については、 動作変更ログ をご参照ください。

注釈

バンドルの動作変更を個別に有効/無効にすることはできません。動作の変更を有効または無効にするには、変更を含むバンドルを有効または無効にする必要があります。

アカウントにおける動作変更バンドルのステータスの確認

アカウントで特定の動作変更バンドルが有効になっているかどうかを確認するには、 SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS 関数を呼び出します。たとえば、 2024_02 という名前のバンドルのステータスを確認するには、

SELECT SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_02');
Copy
+-------------------------------------------------+
| SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_02') |
|-------------------------------------------------|
| DISABLED                                        |
+-------------------------------------------------+

現在利用可能なすべての動作変更バンドルのステータスを確認するには、 SYSTEM$SHOW_ACTIVE_BEHAVIOR_CHANGE_BUNDLES 関数を呼び出します。

SELECT SYSTEM$SHOW_ACTIVE_BEHAVIOR_CHANGE_BUNDLES();
Copy
+--------------------------------------------------------------------------------------------------------------+
| SYSTEM$SHOW_ACTIVE_BEHAVIOR_CHANGE_BUNDLES()                                                                 |
|--------------------------------------------------------------------------------------------------------------|
| [{"name":"2023_08","isDefault":true,"isEnabled":true},{"name":"2024_01","isDefault":false,"isEnabled":true}] |
+--------------------------------------------------------------------------------------------------------------+

アカウントでの動作変更バンドルの有効化

アカウントで特定の動作変更を有効にするには、 SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE 関数を呼び出します。たとえば、 2024_02 という名前のバンドルを有効にするには、

SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Copy
+-------------------------------------------------+
| SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02') |
|-------------------------------------------------|
| ENABLED                                         |
+-------------------------------------------------+

アカウントでの動作変更バンドルの無効化

アカウントで特定の動作変更を無効にするには、 SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE を呼び出します。たとえば、 2024_02 という名前のバンドルを無効にするには、

SELECT SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Copy
+-------------------------------------------------+
| SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02')|
|-------------------------------------------------|
| DISABLED                                        |
+-------------------------------------------------+

アカウントの現在のバージョン確認

アカウントにあるSnowflakeの現在のバージョンを確認するには、 CURRENT_VERSION 関数を呼び出します。例:

SELECT CURRENT_VERSION();
Copy
+-------------------+
| CURRENT_VERSION() |
|-------------------|
| 8.5.1             |
+-------------------+
Copy

マスキングポリシーの戻り値更新の軽減

将来の動作変更リリースバンドルでは、Snowflakeは、マスキングポリシー条件の長さ、精度、およびスケールの値を返す予定です(総称して「戻り値の更新」)。これらの戻り値が更新されると、マスキングポリシーで保護された列に対するクエリは、以下の場合に失敗します。

  • バンドルが有効になっている。

  • マスキングポリシーの条件が、マスキングポリシーに割り当てられている列の長さ、スケール、または精度よりも 大きい 長さ、スケール、または精度を持つ値を返す。例:

    ポリシーを作成する:

    CREATE MASKING POLICY MP AS (s string)
    RETURNS STRING -> 'abcdef';
    
    Copy

    ポリシーを割り当てる:

    CREATE TABLE t(col1 string(2));
    
    ALTER TABLE t MODIFY COLUMN col1 SET MASKING POLICY mp;
    
    Copy

    列をクエリする(失敗):

    SELECT * FROM t;
    
    Copy

この変更の影響を判断し、マスキングポリシー条件を更新してデータを保護するための十分な時間を確保するには、 SNOWFLAKE.BCR_ROLLOUT.BCR_2022_07_DDM_ROLLOUT ビューにクエリを実行して、将来の戻り値の更新がアカウントにどのように影響するかを把握します。

BCR_2022_07_DDM_ROLLOUT ビューは仮のものです。Snowflakeは、動作変更バンドル内の戻り値の更新が 一般で有効 になると、ビューを削除します。この時点で、ビューをクエリして、影響を受ける列とポリシーを特定したり、戻り値の更新による列クエリやマスキングポリシーの割り当て操作の失敗を防いだりすることはできません。

このビューには、2022年7月から始まるデータが記録されています。ビューに対するクエリの完了に時間がかかる場合は、 SET コマンドを使用して開始日と終了日のセッション変数を指定できます。これらの変数は、ビューへのクエリ時に評価する行数を減らすのに役立ちます。例:

SET START_DATE = '2023-02-28';
SET END_DATE = '2023-11-30';
Copy

マスキングポリシーおよび列の関連付けの識別

ビューをクエリして、今後の戻り値の変更を軽減するには、次を実行します。

  1. SNOWFLAKE.BCR_ROLLOUT.BCR_2022_07_DDM_ROLLOUT ビューをクエリします。例:

    USE ROLE ACCOUNTADMIN;
    SET START_DATE = '2023-02-28';
    SET END_DATE = '2023-11-30';
    SELECT * FROM SNOWFLAKE.BCR_ROLLOUT.BCR_2022_07_DDM_ROLLOUT;
    
    Copy
  2. BCR_2022_07_DDM_ROLLOUT ビュー参照 セクションの REASON 列を評価して、マスキングポリシーの条件に対してどのような更新が必要かを判断します。

  3. マスキングポリシーの条件を ALTER MASKING POLICY ステートメントで更新して、列データが保護されたままになり、ポリシーの割り当て操作または保護された列のクエリが失敗しないようにします。

  4. マスキングポリシーが割り当てられているテーブル列をクエリして、新しいポリシー条件をテストします。

BCR_2022_07_DDM_ROLLOUT ビュー参照

BCR_2022_07_DDM_ROLLOUT ビュー(SNOWFLAKE.BCR_ROLLOUT スキーマ内)は、2022年7月15日以降の情報を記録し、次の列を含みます。

データ型

説明

POLICY_NAME

VARCHAR

ポリシーの名前。

POLICY_ID

NUMBER

ポリシーの内部/システム生成識別子。

POLICY_SCHEMA

VARCHAR

ポリシーの親スキーマ。

POLICY_DATABASE

VARCHAR

ポリシーの親データベース。

POLICY_BODY

VARIANT

列データをマスクまたはマスク解除するポリシーの条件。

COLUMN_NAME

VARCHAR

ポリシーを持つ列の名前。

TABLE_NAME

VARCHAR

テーブルの名前。

TABLE_ID

NUMBER

テーブルの内部/システム生成識別子。

TABLE_SCHEMA

VARCHAR

テーブルの親スキーマ。

TABLE_DATABASE

VARCHAR

テーブルの親データベース。

REASON

VARCHAR

考えられる不一致の理由。

REASON 列には、次のテーブルの REASON_MESSAGE 列で指定されている次の値のいずれかを指定できます。以下のテーブルにある追加の列は、管理者が REASON 列を解釈してマスキングポリシー条件を更新する方法を決定するのに役立ちます。

理由メッセージ

原因

アクション

POLICY_ASSOCIATION_ON_NOT_NULL_COLUMN

NOT NULL 列にマスキングポリシーが割り当てられています。

マスキングポリシー条件が、ポリシー条件のどこにも NULL 値を返さないことを確認します。

LENGTH_MISMATCH

データ型が VARCHAR または BINARY の列に割り当てられたマスキングポリシーが、列の長さよりも長いデータを返します。

マスキングポリシー条件を変更して、戻り値の長さが列の長さ以下になるようにします。

PRECISION_MISMATCH

データ型が NUMBER の列に割り当てられたマスキングポリシーが、列の精度よりも高い精度のデータを返します。

ポリシー条件を変更して、戻り値の精度が列の精度以下になるようにします。

SCALE_MISMATCH

データ型が NUMBER または TIMESTAMP の列に割り当てられたポリシーが、列のスケールより大きいスケールのデータを返します。

ポリシー条件を変更して、戻り値のスケールが列のスケール以下になるようにします。

Unknown mismatch.Manual investigation recommended.

マスキングポリシーが NULL 値を返すか、マスキングポリシーの条件にサブクエリが含まれています。

戻り値が列の長さ、精度、またはスケール以下になるようにポリシーを変更します。