SnowflakeからMashuへメタデータを同期するための設定手順と、必要なSnowflake側の権限について説明します
1. メタデータソースの作成
Snowflakeのメタデータを同期するために、タイプとして「Snowflake」を選択してデータソースを作成します。
2. Snowflake側の設定
MashuがSnowflakeからメタデータを同期したり、データをプレビューするためには、接続に使用するロールに対して、適切な権限が付与されている必要があります。以下の手順でSnowflakeに必要な権限を設定ます。
2.1. 秘密鍵と公開鍵のペアを生成する
まず、Snowflakeへの接続認証に使用するキーペアを作成します。
1. 秘密鍵の生成
秘密鍵は、2048ビット以上のRSA暗号かつPEM形式、非暗号化バージョンである必要があります。以下のコマンドで生成します。。
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
2. 公開鍵の生成
次に、作成した秘密鍵から公開鍵を生成します。
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
2.2. Snowflakeユーザーに公開鍵を割り当てる
ALTER USER
コマンドを実行して、生成した公開鍵をSnowflakeユーザーに割り当てます。 公開鍵ファイル(rsa_key.pub
)の内容から、-----BEGIN PUBLIC KEY-----
と-----END PUBLIC KEY-----
の行を除いた、文字列を貼り付けてください。
ALTER USER <ユーザー名> SET RSA_PUBLIC_KEY='<公開鍵>';
2.3. ロールの作成とユーザーへの付与
Mashuが使用する専用のロールを作成し、ユーザーに付与します。
--- 1. ロールを作成CREATE ROLE IF NOT EXISTS <ロール名>;
-- 2. 作成したロールをユーザーに付与GRANT ROLE <ロール名> TO USER <ユーザー名>;
2.4. 基本的な利用権限の付与
作成したロールに対して、各オブジェクトを利用するための基本的なUSAGE
権限を付与します。
-- データウェアハウスの利用権限GRANT USAGE ON WAREHOUSE <ウェアハウス名> TO ROLE <ロール名>;
-- データベースの利用権限GRANT USAGE ON DATABASE <データベース名> TO ROLE <ロール名>;
-- スキーマの利用権限GRANT USAGE ON SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
2.5. 各オブジェクトへのSELECT権限の付与
メタデータの同期やプレビューのために、テーブルやビューなどのオブジェクトに対するSELECT
権限を付与します。
【重要】 権限付与は、既存のオブジェクト (ALL
) と将来作成されるオブジェクト (FUTURE
) の両方に対して行う必要があります。
テーブル (TABLE) へのSELECT権限(ハイブリッドテーブルも含みます)
データベースレベルでの権限付与
-- 既存の全テーブルに権限を付与GRANT SELECT ON ALL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
-- 将来作成される全テーブルに権限を付与GRANT SELECT ON FUTURE TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
スキーマレベルでの権限付与
-- 既存の全テーブルに権限を付与GRANT SELECT ON ALL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
-- 将来作成される全テーブルに権限を付与GRANT SELECT ON FUTURE TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
動的テーブル (DYNAMIC TABLE) へのSELECT権限
データベースレベルでの権限付与
-- 既存の全動的テーブルに権限を付与GRANT SELECT ON ALL DYNAMIC TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
-- 将来作成される全動的テーブルに権限を付与GRANT SELECT ON FUTURE DYNAMIC TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
スキーマレベルでの権限付与
-- 既存の全動的テーブルに権限を付与GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
-- 将来作成される全動的テーブルに権限を付与GRANT SELECT ON FUTURE DYNAMIC TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
Icebergテーブル (ICEBERG TABLE) へのSELECT権限
データベースレベルでの権限付与
-- 既存の全外部テーブルに権限を付与GRANT SELECT ON ALL EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
-- 将来作成される全外部テーブルに権限を付与GRANT SELECT ON FUTURE EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
スキーマレベルでの権限付与
-- 既存の全外部テーブルに権限を付与GRANT SELECT ON ALL EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
-- 将来作成される全外部テーブルに権限を付与GRANT SELECT ON FUTURE EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
外部テーブル (EXTERNAL TABLE) へのSELECT権限
データベースレベルでの権限付与
-- 既存の全外部テーブルに権限を付与GRANT SELECT ON ALL EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
-- 将来作成される全外部テーブルに権限を付与GRANT SELECT ON FUTURE EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
スキーマレベルでの権限付与
-- 既存の全外部テーブルに権限を付与GRANT SELECT ON ALL EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
-- 将来作成される全外部テーブルに権限を付与GRANT SELECT ON FUTURE EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
イベントテーブル (EVENT TABLE) へのSELECT権限
データベースレベルでの権限付与
-- 既存の全イベントテーブルに権限を付与GRANT SELECT ON ALL EVENT TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
-- 将来作成される全イベントテーブルに権限を付与GRANT SELECT ON FUTURE EVENT TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;
スキーマレベルでの権限付与
-- 既存の全イベントテーブルに権限を付与GRANT SELECT ON ALL EVENT TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
-- 将来作成される全イベントテーブルに権限を付与GRANT SELECT ON FUTURE EVENT TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
ビュー (VIEW) への権限
ビューに対する権限は、「ビューの定義(元となるSQL)を同期する必要があるか」と「ビューの定義を同期する必要がないか」で、付与すべき権限が大きく異なります。
1. ビューの定義(SQL)を参照する権限 ビューの元となるSQLを参照するには、そのビューの所有者(OWNER)である必要があります。最も安全な方法は、ビューを所有しているロールを継承することです。ビューの所有者を変更する方法もありますが推奨されません。
-- ビュー所有者ロールの権限を、ロールに付与する(推奨)GRANT ROLE <ビュー所有者のロール名> TO ROLE <ロール名>
2. ビューの結果データを参照する権限 (SELECT
) ビューの定義は不要でそれ以外のメタデータを同期したい場合は、SELECT
権限のみを付与します。
-- データベースレベルGRANT SELECT ON ALL VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;
GRANT SELECT ON FUTURE VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;
-- スキーマレベルGRANT SELECT ON ALL VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
GRANT SELECT ON FUTURE VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
マテリアライズドビュー (MATERIARIZED VIEW) への権限
マテリアライズドビューに対する権限は、「マテリアライズドビューの定義(元となるSQL)を同期する必要があるか」と「マテリアライズドビューの定義を同期する必要がないか」で、付与すべき権限が大きく異なります。
1. マテリアライズドビューの定義(SQL)を参照する権限 ビューの元となるSQLを参照するには、そのマテリアライズドビューの所有者(OWNER)である必要があります。最も安全な方法は、マテリアライズドビューを所有しているロールを継承することです。マテリアライズドビューの所有者を変更する方法もありますが推奨されません。
-- マテリアライズドビュー所有者ロールの権限を、ロールに付与する(推奨)GRANT ROLE <マテリアライズドビュー所有者のロール名> TO ROLE <ロール名>
2. マテリアライズドビューの結果データを参照する権限 (SELECT
) マテリアライズドビューの定義は不要でそれ以外のメタデータを同期したい場合は、SELECT
権限のみを付与します。
-- データベースレベルGRANT SELECT ON ALL MATERIALIZED VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;
GRANT SELECT ON FUTURE MATERIALIZED VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;
-- スキーマレベルGRANT SELECT ON ALL MATERIALIZED VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
GRANT SELECT ON FUTURE MATERIALIZED VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
3. 接続情報設定
データソース画面の「接続設定」タブで、Snowflakeへの接続情報を設定します。
-
組織名: Snowflakeの組織名を指定します。
-
アカウント名: Snowflakeのアカウント名を指定します。
-
組織名とアカウント名は、Snowsightの左下ユーザーメニュー → 「アカウントを切り替える」のホバーで表示されるURLなどから確認できます。
-
-
ユーザー名: 手順2.2 で公開鍵を割り当てたユーザー名を指定します。
-
データベース名: 接続するSnowflakeデータベース名を指定します。
-
ウェアハウス名: メタデータ同期クエリを実行するウェアハウス名を指定します。
- ロール名: 手順2.3で作成したロール名を指定します。指定しない場合、ユーザーの既定ロールが使用され、それもなければPUBLICロールが使用されます。
- 秘密鍵: 手順2.1で作成した秘密鍵ファイル(
rsa_key.p8
)の内容を、-----BEGIN PRIVATE KEY-----
と-----END PRIVATE KEY-----
の行も含めて、そのまま貼り付けてください。
「保存する」ボタンを押下して接続情報を保存します。
4. スキーマ選択
正しい接続設定の保存に成功すると、指定したデータベース内のスキーマ一覧が表示されます。メタデータ同期したいスキーマを選択してください。
5. データソース設定(メタデータ同期オプション)
「データソース設定」タブでは、メタデータの同期に関する3つのオプション(マッピング、マージ、同期対象)を設定します。
1. マッピング設定
SnowflakeのDBコメントを、Mashuのメタデータのどの項目にマッピングするかを選択します。
- エイリアス: DBコメントを「エイリアス」にマッピングします。
- 説明: DBコメントを「説明」にマッピングします。
- エイリアスと説明: DBコメントを「エイリアス」と「説明」の両方にマッピングします。
2. メタデータマージ設定
2回目以降の同期時に、SnowflakeのDBコメントでMashu上の「エイリアス」と「説明」を上書きする際のルールを設定します。
-
チェックがONの場合(デフォルト): DBコメントに値が存在すれば、Mashu側の既存の値を常にその値で上書きします。
-
チェックがOFFの場合: Mashu側の「エイリアス」や「説明」が空の場合にのみ、DBコメントで補完します。既に値が入力されている場合は変更されません。
3. 同期対象設定
Snowflakeから同期するオブジェクトの種類を選択します。チェックを外した種類のオブジェクトは同期されません。
- テーブル: 標準テーブル、外部テーブル、Icebergテーブル、動的テーブルなどが含まれます。
- ビュー: 標準のビューです。
- マテリアライズドビュー: マテリアライズドビューです。
6. メタデータの同期実行
「メタデータ」タブに移動し、「メタデータ同期」ボタンをクリックすることで、Snowflakeからのメタデータ同期が開始されます。