【Snowflake】リネージュ機能の権限周りまとめ
はじめに
2025年9月、今更ながらSnowflakeのリネージュ機能がGAされていることを知りました。
この記事では、Snowflakeリネージュ機能を活用するために必要な権限について、実機検証した内容も含めてまとめます。
リネージュ機能とは
Snowflakeのリネージュ機能は、データオブジェクト間の依存関係とデータの流れを追跡する機能です。
GUIで確認する方法とGET_LINEAGE関数を使って確認する方法が存在します。
基本的な権限要件
1. VIEW LINEAGE権限
リネージュ機能を使用するための最も基本的な権限はVIEW LINEAGEです。この権限により、オブジェクトの上流および下流のリネージュオブジェクトと依存関係を表示できます。
-- アカウントレベルでVIEW LINEAGE権限を付与
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE your_role_name;
重要なポイント:
- デフォルトでは、PUBLICロールにVIEW LINEAGE権限が付与されています
- つまり、基本的にはすべてのユーザーがリネージュを表示できます
- セキュリティを強化したい場合は、PUBLICロールからこの権限を取り消し、カスタムロールに付与することを推奨されています
2. オブジェクトレベルの権限
リネージュを評価したいオブジェクトに対して、適切な権限が必要です:
- テーブル: SELECT権限
- ビュー: SELECT権限
- データベース・スキーマ: USAGE権限
-- 例:特定のテーブルのリネージュを表示するための権限
GRANT USAGE ON DATABASE database_name TO ROLE your_role_name;
GRANT USAGE ON SCHEMA database_name.schema_name TO ROLE your_role_name;
GRANT SELECT ON TABLE database_name.schema_name.table_name TO ROLE your_role_name;
3. すべてのオブジェクトのリネージュを表示する権限
特定のロールがすべてのオブジェクトのリネージュを表示できるようにしたい場合は、RESOLVE ALL権限を付与します:
-- アカウントレベルでRESOLVE ALL権限を付与
GRANT RESOLVE ALL ON ACCOUNT TO ROLE lineage_role;
-- VIEW LINEAGE権限も必要
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE lineage_role;
制限事項と注意点
1. サポートされないオブジェクト
以下のオブジェクトではリネージュが利用できません(2025年9月時点):
- 共有データベース内のオブジェクト
- 共有SNOWFLAKEデータベース内のオブジェクト
- データベースのINFORMATION_SCHEMAにあるオブジェクト
2. 動的テーブルの制限
動的テーブルは他のオブジェクトのリネージュグラフに表示されますが、動的テーブル自体にはLineageタブが表示されません。(2025年9月時点)
3. 履歴の保持期間
- 列のリネージュ: 1年間
- オブジェクトのリネージュ: 1年間
実装例
基本的なリネージュ表示権限の設定
-- 1. カスタムロールの作成
CREATE ROLE lineage_viewer_role;
-- 2. 基本的な権限の付与
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE lineage_viewer_role;
-- 3. 特定のデータベースへのアクセス権限
GRANT USAGE ON DATABASE sales_db TO ROLE lineage_viewer_role;
GRANT USAGE ON SCHEMA sales_db.raw TO ROLE lineage_viewer_role;
GRANT SELECT ON ALL TABLES IN SCHEMA sales_db.raw TO ROLE lineage_viewer_role;
-- 4. ユーザーにロールを割り当て
GRANT ROLE lineage_viewer_role TO USER analyst_user;
セキュリティ強化された設定
-- 1. PUBLICロールからVIEW LINEAGE権限を削除
REVOKE VIEW LINEAGE ON ACCOUNT FROM ROLE PUBLIC;
-- 2. 特定のロールのみに権限を付与
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE data_governance_role;
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE senior_analyst_role;
-- 3. 必要に応じてRESOLVE ALL権限も付与
GRANT RESOLVE ALL ON ACCOUNT TO ROLE data_governance_role;
各権限状態の動作確認
①対象オブジェクトのUSAGEあり / 前段オブジェクトのUSAGEなし / RESOLVE ALL権限なし
GUI
前段オブジェクトの権限がないため表示できません。

関数
GUI同様、関数実行時もオブジェクトは表示されません。

②対象オブジェクトのUSAGEあり / 前段オブジェクトのUSAGEなし / RESOLVE ALL権限あり
GUI
RESOLVE ALL権限によって、前段オブジェクトのUSAGEがなくてもすべて表示されています。

関数
GUI同様、関数実行時もすべてのオブジェクトが表示されています。

③対象オブジェクトのUSAGEなし / 前段オブジェクトのUSAGEなし / RESOLVE ALL権限あり
GUI
GUIではテーブル詳細画面を表示できないため、基本的には操作不可。
※ただし対象オブジェクトのリネージュ画面URLに直接アクセスすれば表示可能でした。

関数
関数実行時はすべてのオブジェクトが表示されています。

まとめ
Snowflakeのリネージュ機能に対して適切な権限管理を行うことで、データを参照させずにリネージュ機能のみを利用するといった制御も可能でした。
要件に合わせて適切に権限設定して運用していきたいです。
Discussion