ALTER VIEW¶
既存のビューのプロパティを変更します。現在サポートされている操作は次のとおりです。
ビューの名前の変更。
セキュアビューへの変換(セキュアビューからの復元)。
ビューのコメントの追加、上書き、削除。
このコマンドを使用してビューの定義を変更することは できない ことに注意してください。ビューの定義を変更するには、ビューをドロップしてから再作成する必要があります。
- こちらもご参照ください。
構文¶
ALTER VIEW [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER VIEW [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER VIEW [ IF EXISTS ] <name> UNSET COMMENT
ALTER VIEW [ IF EXISTS ] <name> SET SECURE
ALTER VIEW [ IF EXISTS ] <name> SET CHANGE_TRACKING = { TRUE | FALSE }
ALTER VIEW [ IF EXISTS ] <name> UNSET SECURE
ALTER VIEW [ IF EXISTS ] <name> dataGovnPolicyTagAction
条件:
dataGovnPolicyTagAction ::= { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] } | { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES } | { SET AGGREGATION POLICY <policy_name> [ FORCE ] | UNSET AGGREGATION POLICY } | ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] ] [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ] | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET PROJECTION POLICY <policy_name> [ FORCE ] | UNSET PROJECTION POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
パラメーター¶
name
変更するビューの識別子を指定します。識別子にスペースまたは特殊文字が含まれる場合、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。
RENAME TO new_name
ビューの新しい識別子を指定します。スキーマに対して一意である必要があります。
詳細については、 識別子の要件 をご参照ください。
オプションでオブジェクトの名前を変更して、オブジェクトを別のデータベースやスキーマに移動できます。これを実行するには、新しいデータベース名やスキーマ名をそれぞれ
db_name.schema_name.object_name
またはschema_name.object_name
の形式で含む、修飾されたnew_name
値を指定します。注釈
宛先データベースやスキーマはすでに存在している必要があります。また、同じ名前のオブジェクトが宛先データベースにすでに存在することはできません。存在する場合、ステートメントはエラーを返します。
オブジェクトをマネージドアクセススキーマに移動することは、オブジェクトの所有者(つまり、オブジェクトに対して OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き 禁止されています。
オブジェクトの名前を変更すると、そのオブジェクトを参照する他のオブジェクトも新しい名前で更新する必要があります。
SET ...
ビューに設定するプロパティを指定します。
SECURE
ビューをセキュアとして指定します。
CHANGE_TRACKING = TRUE | FALSE
テーブルの変更追跡を有効または無効にするように指定します。
TRUE
は、ビューで変更の追跡を有効にし、その設定を基になるすべてのテーブルにカスケードします。FALSE
は、ビューの変更追跡を無効にし、その設定をすべての基になるテーブルにカスケードします。
COMMENT = 'string_literal'
ビューのコメントを追加するか、既存のコメントを上書きします。
注釈
各ビュープロパティを個別に設定する必要があります。
UNSET ...
ビューの設定を解除するプロパティを指定し、デフォルトにリセットします。
SECURE
COMMENT
プロパティをリセットするときは、名前のみを指定します。プロパティの値を指定すると、エラーが返されます。
注釈
各ビュープロパティを個別にリセットする必要があります。
データガバナンス方針とタグアクション(dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。
policy_name
ポリシーの識別子。スキーマに対して一意である必要があります。
以下の句は、テーブル、ビュー、イベントテーブルなど、行アクセスポリシーをサポートするすべての種類のテーブルに適用されます。簡略化するために、句は単に「テーブル」を指しています。
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
行アクセスポリシーをテーブルに追加します。
少なくとも1つの列名を指定する必要があります。追加の列は、各列名をコンマで区切って指定できます。この式を使用して、イベントテーブルと外部テーブルの両方に行アクセスポリシーを追加します。
DROP ROW ACCESS POLICY policy_name
テーブルから行アクセスポリシーをドロップします。
テーブルからポリシーをドロップするには、この句を使用します。
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
テーブルに設定されている行アクセスポリシーをドロップし、1つの SQL ステートメントで同じテーブルに行アクセスポリシーを追加します。
DROP ALL ROW ACCESS POLICIES
テーブルから すべて の行アクセスポリシーの関連付けをドロップします。
この式は、イベントテーブルからポリシーをドロップする 前に、スキーマから行アクセスポリシーをドロップするときに役立ちます。この式を使用して、テーブルから行アクセスポリシーの関連付けをドロップします。
SET AGGREGATION POLICY policy_name [ FORCE ]
テーブルに 集計ポリシー を割り当てます。既存の集計ポリシーを新しい集計ポリシーにアトミックに置き換えるには、オプションの FORCE パラメーターを使用します。
UNSET AGGREGATION POLICY
テーブルから集計ポリシーをデタッチします。
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
条件付きマスキングポリシー SQL 式に渡す引数を指定します。
リストの最初の列は、データをマスクまたはトークン化するポリシー条件の列を指定し、マスキングポリシーが設定されている列と一致する 必要 があります。
追加の列は、最初の列でクエリが実行されたときに、クエリ結果の各行のデータをマスクするかトークン化するかを決定するために評価する列を指定します。
USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。
FORCE
単一のステートメント内で、列に現在設定されているマスキングまたは投影ポリシーを別のポリシーに置き換えます。
マスキングポリシーで
FORCE
キーワードを使用するには、 ALTER TABLE ステートメント(つまり STRING)内のポリシーの データ型 が、列に現在設定されているマスキングポリシーのデータ型(つまり STRING)と一致している必要があります。現在列にマスキングポリシーが設定されていない場合は、このキーワードを指定しても効果はありません。
詳細については、 列のマスキングポリシーを置き換える または 投影ポリシーの置き換え をご参照ください。
使用上の注意¶
ビューをマネージドアクセススキーマに(ALTER VIEW ... RENAME TO 構文を使用して)移動することは、ビューの所有者(つまり、ビューに対する OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き、禁止されています。
マスキングポリシーの場合、
USING
句とFORCE
キーワードはどちらもオプションです。どちらも、列にマスキングポリシーを設定する必要はありません。USING
句とFORCE
キーワードは、個別にまたは一緒に使用できます。詳細については、以下をご参照ください。テーブルの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のテーブルに適用できます。
マスキングポリシーを使用して1つ以上のテーブル列を変更する場合、または行アクセスポリシーを使用してテーブル自体を変更する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と、行アクセスポリシーによって保護されているテーブルに対するクエリをシミュレートします。
ビューの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のビューに適用できます。
行アクセスポリシーの場合、
Snowflakeは、単一の SQL ステートメントで行アクセスポリシーの追加とドロップをサポートしています。
たとえば、テーブルにすでに設定されている行アクセスポリシーを別のポリシーに置き換えるには、最初に行アクセスポリシーをドロップしてから、新しい行アクセスポリシーを追加します。
特定のリソース(つまり、テーブルまたはビュー)の場合、行アクセスポリシーを
ADD
またはDROP
するには、スキーマに対する APPLY ROW ACCESS POLICY 権限、 または リソースに対する OWNERSHIP 権限と行アクセスポリシーリソースに対する APPLY 権限が必要です。テーブルまたはビューは、一度に1つの行アクセスポリシーでのみ保護できます。ポリシー本体が、行アクセスポリシーによって保護されているテーブルまたはビューの列、またはマスキングポリシーによって保護されている列を参照している場合、ポリシーの追加は失敗します。
同様に、マスキングポリシー本体が、行アクセスポリシーまたは別のマスキングポリシーによって保護されているテーブルを参照している場合、テーブル列へのマスキングポリシーの追加は失敗します。
行アクセスポリシーは、システムビューまたはテーブル関数には適用できません。
他の DROP <オブジェクト> 操作と同様に、行アクセスポリシーが追加されていないリソースから行アクセスポリシーをドロップしようとすると、Snowflakeはエラーを返します。
オブジェクトに行アクセスポリシーと1つ以上のマスキングポリシーの両方がある場合は、行アクセスポリシーが最初に評価されます。
メタデータについて、
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
ビューの名前を view1
から view2
に変更する。
ALTER VIEW view1 RENAME TO view2;
ビューをセキュアビューに変換する。
ALTER VIEW view1 SET SECURE;
セキュアビューを通常のビューに戻す。
ALTER VIEW view1 UNSET SECURE;
列レベルのセキュリティマスキングポリシーをビュー列に適用する。
-- single column ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v; -- multiple columns ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v , COLUMN dob SET MASKING POLICY dob_mask_v ;
ビュー列から列レベルのセキュリティマスキングポリシーを設定解除する。
-- single column ALTER VIEW user_info_v modify column ssn_number unset masking policy; -- multiple columns ALTER VIEW user_info_v modify column ssn_number unset masking policy , column dob unset masking policy ;
次の例では、ビューに行アクセスポリシーを追加します。ポリシーを設定した後、 Information Schema を確認することで検証できます。
alter view v1 add row access policy rap_v1 on (empl_id);
次の例では、ビューから行アクセスポリシーをドロップします。 Information Schema にクエリを実行して、ポリシーがドロップされたことを検証します。
alter view v1 drop row access policy rap_v1;
次の例は、ビューの単一のSQLステートメントで行アクセスポリシーの追加とドロップを組み合わせる方法を示しています。 Information Schema を確認して結果を検証します。
alter view v1 drop row access policy rap_v1_version_1, add row access policy rap_v1_version_2 on (empl_id);