Snowflakeのメタデータを同期するために、タイプとして「Snowflake」を選択してデータソースを作成します。
MashuがSnowflakeからメタデータを同期したり、データをプレビューするためには、接続に使用するロールに対して、適切な権限が付与されている必要があります。以下の手順でSnowflakeに必要な権限を設定します。
まず、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
ALTER USERコマンドを実行して、生成した公開鍵をSnowflakeユーザーに割り当てます。 公開鍵ファイル(rsa_key.pub)の内容から、-----BEGIN PUBLIC KEY-----と-----END PUBLIC KEY-----の行を除いた、文字列を貼り付けてください。
ALTER USER <ユーザー名> SET RSA_PUBLIC_KEY='<公開鍵>';
Mashuが使用する専用のロールを作成し、ユーザーに付与します。
--- 1. ロールを作成CREATE ROLE IF NOT EXISTS <ロール名>;
-- 2. 作成したロールをユーザーに付与GRANT ROLE <ロール名> TO USER <ユーザー名>;
作成したロールに対して、各オブジェクトを利用するための基本的なUSAGE権限を付与します。
-- データウェアハウスの利用権限GRANT USAGE ON WAREHOUSE <ウェアハウス名> TO ROLE <ロール名>;
-- データベースの利用権限GRANT USAGE ON DATABASE <データベース名> TO ROLE <ロール名>;
-- スキーマの利用権限GRANT USAGE ON SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;
メタデータの同期やプレビューのために、テーブルやビューなどのオブジェクトに対する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 <ロール名>;
ビューに対する権限は、「ビューの定義(元となる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 <ロール名>;
マテリアライズドビューに対する権限は、「マテリアライズドビューの定義(元となる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 <ロール名>;
Snowflake への接続は IP アドレス 35.79.51.18 から行われます。
ネットワークポリシーで接続元 IP アドレスを制限している場合は、この IP アドレスを許可してください。
データソース画面の「接続設定」タブで、Snowflakeへの接続情報を設定します。
rsa_key.p8)の内容を、-----BEGIN PRIVATE KEY-----と-----END PRIVATE KEY-----の行も含めて、そのまま貼り付けてください。「保存する」ボタンを押下して接続情報を保存します。
正しい接続設定の保存に成功すると、指定したデータベース内のスキーマ一覧が表示されます。メタデータ同期したいスキーマを選択してください。
「データソース設定」タブでは、メタデータの同期に関する3つのオプション(マッピング、マージ、同期対象)を設定します。
1. マッピング設定
SnowflakeのDBコメントを、Mashuのメタデータのどの項目にマッピングするかを選択します。
2. メタデータマージ設定
2回目以降の同期時に、SnowflakeのDBコメントでMashu上の「エイリアス」と「説明」を上書きする際のルールを設定します。
3. 同期対象設定
Snowflakeから同期するオブジェクトの種類を選択します。チェックを外した種類のオブジェクトは同期されません。
「メタデータ」タブに移動し、「メタデータ同期」ボタンをクリックすることで、Snowflakeからのメタデータ同期が開始されます。