Object Taggingは、Snowflakeのデータベースオブジェクト(テーブル、ビュー、列、スキーマ、データベース等)に キー・バリュー形式のメタデータタグを付与する機能です。データ分類(PII、機密度等)、コスト配分、コンプライアンス管理に利用され、 Tag-based Masking/Row Access Policyと連携することで、タグの値に基づいた自動的なデータ保護を実現します。Enterprise Edition以上で利用可能です。
-- 基本的なタグの作成
CREATE TAG governance.data_classification;
-- 許可値を制限したタグの作成
CREATE TAG governance.pii_level
ALLOWED_VALUES 'HIGH', 'MEDIUM', 'LOW', 'NONE';
-- コスト配分用タグ
CREATE TAG governance.cost_center
ALLOWED_VALUES 'ENGINEERING', 'MARKETING', 'FINANCE', 'HR';
-- タグにコメントを追加
CREATE TAG governance.data_owner
COMMENT = 'データオーナーの部門名を管理するタグ';-- テーブルにタグを設定
ALTER TABLE hr.employees
SET TAG governance.data_classification = 'CONFIDENTIAL';
-- 列にタグを設定
ALTER TABLE hr.employees
ALTER COLUMN ssn
SET TAG governance.pii_level = 'HIGH';
ALTER TABLE hr.employees
ALTER COLUMN email
SET TAG governance.pii_level = 'MEDIUM';
ALTER TABLE hr.employees
ALTER COLUMN department
SET TAG governance.pii_level = 'NONE';
-- スキーマにタグを設定(配下のオブジェクトに継承される)
ALTER SCHEMA hr
SET TAG governance.data_owner = 'HR_DEPARTMENT';
-- データベースにタグを設定
ALTER DATABASE analytics
SET TAG governance.cost_center = 'ENGINEERING';
-- ウェアハウスにタグを設定
ALTER WAREHOUSE compute_wh
SET TAG governance.cost_center = 'ENGINEERING';
-- タグの値を変更
ALTER TABLE hr.employees
ALTER COLUMN ssn
SET TAG governance.pii_level = 'MEDIUM';
-- タグの解除
ALTER TABLE hr.employees
ALTER COLUMN ssn
UNSET TAG governance.pii_level;Tag-based Maskingは、タグの値に基づいて自動的にMasking PolicyやRow Access Policyを適用する仕組みです。 タグにポリシーを紐づけておくと、そのタグが設定された列に自動的にポリシーが適用されます。 列にタグを追加するだけでポリシーが適用されるため、大量のテーブル・列を持つ環境でのガバナンス管理が効率化します。
-- PII HIGH用のMasking Policy
CREATE OR REPLACE MASKING POLICY mask_pii_high
AS (val VARCHAR) RETURNS VARCHAR ->
CASE
WHEN IS_ROLE_IN_SESSION('DATA_STEWARD') THEN val
WHEN IS_ROLE_IN_SESSION('COMPLIANCE') THEN val
ELSE '********'
END;
-- PII MEDIUM用のMasking Policy
CREATE OR REPLACE MASKING POLICY mask_pii_medium
AS (val VARCHAR) RETURNS VARCHAR ->
CASE
WHEN IS_ROLE_IN_SESSION('DATA_STEWARD') THEN val
ELSE CONCAT(LEFT(val, 2), '****')
END;
-- タグにMasking Policyを紐づけ
ALTER TAG governance.pii_level
SET MASKING POLICY mask_pii_high;
-- タグの値ごとに異なるポリシーを紐づけることも可能
-- (ただし1つのタグに対してデータ型ごとに1つのポリシー)
-- これにより、pii_level = 'HIGH' のタグが設定された
-- 全ての列に自動的にmask_pii_highが適用される-- 特定テーブルに設定されたタグを確認
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.TAG_REFERENCES('hr.employees', 'TABLE')
);
-- 特定列に設定されたタグを確認
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.TAG_REFERENCES('hr.employees.ssn', 'COLUMN')
);
-- テーブル内の全列のタグを一括確認
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.TAG_REFERENCES_ALL_COLUMNS('hr.employees', 'TABLE')
);
-- Account Usageビューでアカウント全体のタグ使用状況を確認
SELECT
tag_name,
tag_value,
object_name,
column_name,
domain -- TABLE, COLUMN, SCHEMA, DATABASE, WAREHOUSE等
FROM SNOWFLAKE.ACCOUNT_USAGE.TAG_REFERENCES
WHERE tag_name = 'PII_LEVEL'
ORDER BY object_name;
-- 特定タグの値ごとのオブジェクト数を集計
SELECT
tag_value,
domain,
COUNT(*) AS object_count
FROM SNOWFLAKE.ACCOUNT_USAGE.TAG_REFERENCES
WHERE tag_name = 'PII_LEVEL'
GROUP BY tag_value, domain
ORDER BY tag_value;| タグ設定先 | 継承されるオブジェクト |
|---|---|
| Database | 全Schema → 全Table/View → 全Column |
| Schema | Schema内の全Table/View → 全Column |
| Table/View | Table/View内の全Column |
| Column | 継承なし(最下位オブジェクト) |
下位オブジェクトに直接タグを設定した場合、その値は継承値より優先されます。 例えばスキーマにpii_level = 'LOW'を設定し、特定の列にpii_level = 'HIGH'を設定すると、 その列では'HIGH'が有効になります。
-- タグの作成権限
GRANT CREATE TAG ON SCHEMA governance TO ROLE tag_admin;
-- タグの適用権限
GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
-- Tag-based Masking Policyの設定に必要な追加権限
GRANT APPLY MASKING POLICY ON ACCOUNT TO ROLE tag_admin;
-- タグの一覧確認
SHOW TAGS IN SCHEMA governance;
-- タグの詳細確認
DESCRIBE TAG governance.pii_level;Security & Governance
問題 1
governance.pii_levelタグにMasking Policyが紐づけられている。データエンジニアがhr.employeesテーブルのphone_number列にALTER TABLE ... ALTER COLUMN phone_number SET TAG governance.pii_level = 'HIGH'を実行した。この操作の結果として正しいものはどれか。
正解: B
Tag-based Maskingでは、タグにMasking Policyを紐づけておくと、そのタグが設定された列に自動的にポリシーが適用されます。列にタグを設定するだけでMasking Policyの個別アタッチが不要になるため、大規模環境でのガバナンス管理が効率化します。データは物理的にマスクされるわけではなく、クエリ実行時に動的にマスク処理が行われます。
タグを削除するとTag-based Masking Policyも自動的に解除されますか?
タグをDROP TAGで削除すると、そのタグに紐づけられたTag-based Masking/Row Access Policyの関連付けも自動的に解除されます。ただしポリシーオブジェクト自体は削除されません。また、タグを列やテーブルからUNSET TAGで外した場合も、そのオブジェクトへのTag-basedポリシー適用は解除されます。タグ削除前にTAG_REFERENCES関数で影響範囲を確認することが推奨されます。
タグの値にはどのような制約がありますか?
タグの値は最大256文字のVARCHAR型文字列です。ALLOWED_VALUESを設定すると、指定された値のみが設定可能になります(最大300個)。ALLOWED_VALUESを設定しない場合は任意の文字列を値として設定できます。タグの値は大文字小文字を区別しますが、タグ名自体はSnowflakeの識別子規則に従い、デフォルトでは大文字に変換されます。
タグの継承(Tag Lineage)とは何ですか?
Snowflakeのタグはオブジェクト階層を自動的に継承します。データベースにタグを設定すると、そのデータベース内の全スキーマ・テーブル・列にタグが継承されます。スキーマにタグを設定すればそのスキーマ内のテーブル・列に継承されます。下位オブジェクトに直接タグを設定すると、継承値よりも直接設定値が優先されます。TAG_REFERENCES_ALL_COLUMNS関数で継承を含む全タグの適用状況を確認できます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...