Snowflake

Snowflake Object Tagging実践ガイド: 分類・ガバナンス・Tag-based Masking

2026-03-26
更新: 2026-03-27
NicheeLab編集部

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連携

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が適用される

TAG_REFERENCES関数による監査

-- 特定テーブルに設定されたタグを確認
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;

タグの継承(Tag Lineage)

タグ設定先継承されるオブジェクト
Database全Schema → 全Table/View → 全Column
SchemaSchema内の全Table/View → 全Column
Table/ViewTable/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'を実行した。この操作の結果として正しいものはどれか。

  1. phone_number列にpii_levelタグが設定されるが、Masking Policyの適用は別途ALTER TABLEが必要
  2. phone_number列にpii_levelタグが設定され、タグに紐づいたMasking Policyが自動的に適用される
  3. タグとMasking Policyは独立した機能のため、タグの設定はMasking Policyに影響しない
  4. phone_number列の既存データが物理的にマスクされて上書きされる

正解: 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関数で継承を含む全タグの適用状況を確認できます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.