Snowflakeの接続情報
  • 29 Nov 2023
  • ダーク
    ライト
  • PDF

Snowflakeの接続情報

  • ダーク
    ライト
  • PDF

Article Summary

概要

Snowflakeの接続情報を作成するためのヘルプページです。

なお、Snowflakeを利用する場合、必要な権限が付与されたロールを、あらかじめユーザーに付与しておく必要があります。
詳しくは、後述の権限とロールを参照ください。

入力項目

項目名必須内容
名前Yestrocco内部で利用する接続情報の名前を入力します。
メモNotrocco内部で利用する接続情報のメモを入力できます。
ホストYesSnowflakeのホストを入力します。
詳しくは、ホスト名の入力形式を参照ください。
ユーザーYesSnowflakeのユーザー名を入力します。
認証方式Yes認証方式を選択します。
データマート定義に用いる場合は、キーペア認証を選択してください。
パスワードYes認証方式でユーザー・パスワード認証を選択した場合に入力してください。
Snowflakeのパスワードを入力します。
秘密鍵Yes認証方式でキーペア認証を選択した場合に入力します。
Snowflakeの秘密鍵を入力してください。
詳しくは、キーペア認証についてを参照ください。
ロールNoユーザーに付与されているロール名を入力します。
未入力の場合、Snowflakeのデフォルトの設定が利用されます。デフォルトの設定がない場合は、入力する必要があります。
ロールについて、詳しくは権限とロールを参照ください。
JDBCドライバーNoSnowflakeサーバーに接続するJDBCドライバーのバージョンを選択できます。
  • 3.14.2
  • JDBCドライバーのバージョンについて

    JDBCドライバーが未指定の場合、それぞれ以下のバージョンが利用されます。

    • 転送元Snowflakeの場合:3.13.5
    • 転送先Snowflakeの場合:3.13.26

    ただし、JDBCドライバーの3.13系は2023年10月31日をもってSnowflakeのサポート対象外となります。
    そのため、3.14系のバージョンの利用を推奨しております。

    ホスト名の入力形式

    以下のいずれかの形式で入力できます。

    • <LOCATOR>.<REGION>.<CLOUD>.snowflakecomputing.com
      • 入力例:hm*****.ap-northeast-1.aws.snowflakecomputing.com
    • <ORGANIZATION>-<ACCOUNT_NAME>.snowflakecomputing.com
      • 入力例:*******-km*****.snowflakecomputing.com
      • 本入力形式は、ユーザー・パスワード認証の選択時のみ利用できます。キーペア認証時には利用できません。

    上記各要素は、Snowflakeのコンソール画面左下より確認できます。
    connection-configuration-snowflake_001

    キーペア認証について

    公開鍵・秘密鍵を生成し、公開鍵をSnowflake側に、秘密鍵をtrocco側に、設定する必要があります。

    公開鍵・秘密鍵の生成

    ターミナルにて、以下のコマンドを順に実施してください。

    1. 秘密鍵を作成する
      生成した秘密鍵は、troccoのSnowflake接続情報の秘密鍵欄に入力してください。
    $ openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    
    1. 公開鍵を生成する
    $ openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
    
    1. 公開鍵を整形する(改行と不要な箇所の除去)
    $ cat rsa_key.pub | \
    tr -d "\n" | \
    sed "s/-----BEGIN PUBLIC KEY-----//g" | \
    sed "s/-----END PUBLIC KEY-----//g"
    

    Snowflakeへの公開鍵の設定

    先に作成・整形した公開鍵を踏まえて、Snowflake側で以下クエリを実行してください。

    ALTER USER {USERNAME} SET RSA_PUBLIC_KEY='{PUBLIC_KEY}'
    

    権限とロール

    Snowflakeを利用するにあたり、ロールに必要な権限を付与し、ユーザーにロールを付与する必要があります。
    なお、転送設定(転送元・転送先)とデータマート定義とで、ロールに付与する必要のある権限は異なります。

    転送設定(転送元)を利用する場合

    必要となる権限

    項目権限内容
    仮想ウェアハウス権限OPERATEウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。
    仮想ウェアハウス権限USAGE仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。
    データベース権限USAGEデータベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。
    スキーマ権限USAGEスキーマを使用できるようにします。
    テーブル権限SELECTテーブルでSELECTステートメントを実行できるようにします。

    クエリサンプル

    以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。
    実際にロールに権限を付与する場合は、適宜内容を読み替えてください。

    • 作成するロール:TROCCO_INPUT_ROLE
    • ロールを付与するユーザー:TROCCO_USER
    • 対象ウェアハウス:TROCCO_WAREHOUSE
    • 対象データベース:TROCCO_DATABASE
    • 対象スキーマ:PUBLIC
    • 対象テーブル:TROCCO_TABLE

    -- ロールを作成可能なロールに切り替える

    USE ROLE ACCOUNTADMIN;
    

    -- ロールを新規作成する

    CREATE ROLE TROCCO_INPUT_ROLE;
    

    -- 指定したユーザーにロールを使用可能にする

    GRANT ROLE TROCCO_INPUT_ROLE TO USER TROCCO_USER;
    

    -- ユーザーに対し、作成したロールをデフォルトで使用するロールにする

    ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_INPUT_ROLE;
    

    -- ウェアハウスの利用権限をロールに付与する

    GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_INPUT_ROLE;
    GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_INPUT_ROLE;
    

    -- データベースの利用権限をロールに付与する

    GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_INPUT_ROLE;
    

    -- スキーマの利用権限をロールに付与する

    GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_INPUT_ROLE;
    

    -- スキーマの全テーブルに対してSELECTクエリを実行可能にする権限をロールに付与する場合

    GRANT SELECT ON ALL TABLES IN SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_INPUT_ROLE;
    

    -- 個別のテーブルのみSELECTクエリを実行可能にする権限をロールに付与する場合

    GRANT SELECT on TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_INPUT_ROLE;
    

    転送設定(転送先)を利用する場合

    必要となる権限

    項目権限内容備考
    仮想ウェアハウス権限OPERATEウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。
    仮想ウェアハウス権限USAGE仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。
    データベース権限USAGEデータベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。
    スキーマ権限USAGEスキーマを使用できるようにします。
    スキーマ権限CREATE TABLEテーブルの複製など、スキーマで新しいテーブルを作成できるようにします。
    スキーマ権限CREATE STAGEステージの複製など、スキーマで新しいステージを作成できるようにします。
    テーブル権限OWNERSHIPテーブルの所有権を譲渡します。これにより、テーブルに対するフル制御が付与されます。転送モードがreplaceの場合、
    DROP TABLE クエリを実行するために必要となります。
    DROP TABLEクエリを使用するにはテーブルの所有権を持つロールを使用する必要があります。
    Snowflake ドキュメント - 使用上の注意
    ※ すでに存在するテーブルに対して実行する場合のみ必要になります。

    クエリサンプル

    以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。
    実際にロールに権限を付与する場合は、適宜内容を読み替えてください。

    • 作成するロール:TROCCO_OUTPUT_ROLE
    • ロールを付与するユーザー:TROCCO_USER
    • 対象ウェアハウス:TROCCO_WAREHOUSE
    • 対象データベース:TROCCO_DATABASE
    • 対象スキーマ:PUBLIC
    • 対象テーブル:TROCCO_TABLE

    -- ロールを作成可能なロールに切り替える

    USE ROLE ACCOUNTADMIN;
    

    -- ロールを新規作成する

    CREATE ROLE TROCCO_OUTPUT_ROLE;
    

    -- 指定したユーザーにロールが使えるようにする

    GRANT ROLE TROCCO_OUTPUT_ROLE TO USER TROCCO_USER;
    

    -- ユーザーに対し、作成したロールをデフォルトで使用するロールにする

    ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_OUTPUT_ROLE;
    

    -- ウェアハウスの利用権限をロールに付与する

    GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_OUTPUT_ROLE;
    GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_OUTPUT_ROLE;
    

    -- データベースの利用権限をロールに付与する

    GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_OUTPUT_ROLE;
    

    -- スキーマの利用権限をロールに付与する

    GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_OUTPUT_ROLE;
    

    -- テーブル作成の権限をロールに付与する

    GRANT CREATE TABLE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_OUTPUT_ROLE;
    

    -- ステージの操作の権限をロールに付与する

    GRANT CREATE STAGE on SCHEMA TROCCO_DATABASE.PUBLIC to ROLE TROCCO_OUTPUT_ROLE;
    

    -- テーブルの所有権をロールに移行させる
    -- ※ すでに存在するテーブルに対して実行する場合に必要になります。

    GRANT OWNERSHIP ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_OUTPUT_ROLE;
    

    データマート定義を利用する場合

    必要となる権限

    項目権限内容備考
    仮想ウェアハウス権限OPERATEウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。
    仮想ウェアハウス権限USAGE仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。
    データベース権限USAGEデータベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。
    スキーマ権限USAGEスキーマを使用できるようにします。
    スキーマ権限CREATE TABLEテーブルの複製など、スキーマで新しいテーブルを作成できるようにします。
    テーブル権限SELECTテーブルでSELECTステートメントを実行できるようにします。
    テーブル権限INSERTテーブルでINSERTステートメントを実行できるようにします。書き込みモードが追記の場合、出力先テーブルへデータを登録するために必要となります。
    テーブル権限OWNERSHIPテーブルの所有権を譲渡します。これにより、テーブルに対するフル制御が付与されます。書き込みモードが全件洗い替えの場合、出力先テーブルの削除を実行するために必要となります。
    ※ すでに存在するテーブルに対して実行する場合のみ必要になります。

    クエリサンプル

    以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。
    実際にロールに権限を付与する場合は、適宜内容を読み替えてください。

    • 作成するロール:TROCCO_DATAMART_ROLE
    • ロールを付与するユーザー:TROCCO_USER
    • 対象ウェアハウス:TROCCO_WAREHOUSE
    • 対象データベース:TROCCO_DATABASE
    • 対象スキーマ:PUBLIC
    • 対象テーブル:TROCCO_TABLE

    -- ロールを作成可能なロールに切り替える

    USE ROLE ACCOUNTADMIN;
    

    -- ロールを新規作成する

    CREATE ROLE TROCCO_DATAMART_ROLE;
    

    -- 指定したユーザーにロールが使えるようにする

    GRANT ROLE TROCCO_DATAMART_ROLE TO USER TROCCO_USER;
    

    -- ユーザーに対し、作成したロールをデフォルトで使用するロールにする

    ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_DATAMART_ROLE;
    

    -- ウェアハウスの利用権限をロールに付与する

    GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_DATAMART_ROLE;
    
    GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_DATAMART_ROLE;
    

    -- データベースの利用権限をロールに付与する

    GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_DATAMART_ROLE;
    

    -- スキーマの利用権限をロールに付与する

    GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_DATAMART_ROLE;
    

    -- テーブル作成の権限をロールに付与する

    GRANT CREATE TABLE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_DATAMART_ROLE;
    

    -- テーブルへINSERTクエリを実行可能にする権限をロールに付与する

    GRANT INSERT ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_DATAMART_ROLE;
    

    -- テーブルの所有権をロールに移行させる
    -- ※ すでに存在するテーブルに対して実行する場合に必要になります。

    GRANT OWNERSHIP ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_DATAMART_ROLE;
    

    この記事は役に立ちましたか?