🌱

【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