
Tableau Desktop/Tableau CloudからSnowflake OAuthを用いてSnowflakeへ接続してみた
さがらです。
Tableau Desktop/Tableau CloudからSnowflake OAuthを用いてSnowflakeへ接続してみたので、その内容を本記事でまとめてみます。
使用する製品のバージョン
- Tableau Desktop:2025.1
- Tableau Cloud:2025.1.0
- Snowflake:9.7.3
Security Integrationの作成
最初に、Snowflake OAuthを使うために、Tableau Desktop用とTableau Cloud用、それぞれに対してSecurity Integrationを作成します。
Tableau Desktop用のSecurity Integration
まず、Tableau Desktop用にSecurity Integrationを作成します。以下のドキュメントを参考に作成します。
create security integration sagara_tableaudesktop_oauth_int
type = oauth
enabled = true
oauth_client = tableau_desktop
oauth_refresh_token_validity = 7776000 -- tokenの有効期限。最大値の「7776000(90日間)」に設定
oauth_use_secondary_roles = none -- secondary roleの有効化について、noneにすると無効化される
blocked_roles_list = ('sysadmin'); -- ここで指定したロールは、Snowflake OAuth接続の際に利用できない
Tableau Cloud用のSecurity Integration
次に、Tableau Cloud用にSecurity Integrationを作成します。以下のドキュメントを参考に作成します。
create security integration sagara_tableaucloud_oauth_int
type = oauth
enabled = true
oauth_client = tableau_server
oauth_refresh_token_validity = 7776000 -- tokenの有効期限。最大値の「7776000(90日間)」に設定
oauth_use_secondary_roles = none -- secondary roleの有効化について、noneにすると無効化される
blocked_roles_list = ('sysadmin'); -- ここで指定したロールは、Snowflake OAuth接続の際に利用できない
参考:accountadminなどをOAuth認証で除外したい場合
上述のクエリではblocked_roles_listにsysadminだけを入れていましたが、accountadmin、orgadmin、securityadminはデフォルトでブロックされるようにOAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LISTというパラメータで設定がされています。
これらのロールをSecurity Integration作成時にblocked_roles_listで指定しようとすると、下図のようにエラーが起きます。(既にアカウントレベルでブロック済のところに更にブロックしようとしているだけなのですが、エラーになるようです。)

事前準備:ドライバーのインストール
以下のURLから、Snowflake用の最新のODBCドライバーをダウンロードして、インストールしておきます。
Tableau Desktopからパブリッシュして確認~デフォルトロール・ウェアハウスがあるユーザー編~
下図のようにdefault_warehouseとdefault_roleが定義されておりMFAも設定されているユーザーで、Snowflakeに接続してワークブックを作成してパブリッシュしてみます。

Tableau Desktopからの接続&パブリッシュ
接続からSnowflakeを押します。

サーバー欄にだけ、対象のSnowflakeアカウントのURLを入れて、認証はOAuthでのサインインにして、サインインを押します。
※ここで役割(ロール)やウェアハウスを入力しない理由は、ここで固定してしまうとパブリッシュしたときにそのロールとウェアハウスの権限を持っていないとクエリできなくなってしまうためです。(弊社の別のブログより)

すると、ブラウザが立ち上がるため、SnowflakeアカウントのユーザーとPWを入力します。

MFAを設定している場合は、MFAの認証画面も表示されます。

MFAの認証後、下図のように表示されるため、許可を押します。使用するユーザーに設定したデフォルトロールが使われることがわかります。

この後、Tableau Desktopに戻ると、Snowflakeへの接続が完了していることがわかります。
これでダッシュボードをつくってパブリッシュするのですが、ウェアハウスを指定してしまうとパブリッシュした後にそのウェアハウスのUSAGE権限を持つ場合のみTableau Cloudで対象のワークブックのコンテンツを閲覧できるようになるため、注意しましょう。(弊社の別のブログより)

今回は適当にシートでグラフを作成して、パブリッシュします。

パブリッシュする際のポイントとしては、認証はユーザーにメッセージを表示にすることです。これを指定しないとTableau CloudにSnowflakeの認証情報が埋め込まれてしまい、Tableau Cloudで閲覧する際に各ユーザーに対してSnowflakeへのOAuth認証が効かなくなってしまいます。

Tableau Cloudからの閲覧
パブリッシュした後に対象のワークシートを閲覧しようとすると、下図の画面が表示されますので、サインインを押します。

あとはTableau Desktopで認証した際と同じ手順で、OAuthによる認証を行います。



これで、Tableau Cloud上でもパブリッシュしたワークシートが確認できました!

おまけ:Tableau DesktopからSnowflakeへOAuthで接続~デフォルトロール・ウェアハウスがないユーザー編~
下図のようにdefault_warehouseとdefault_roleが定義されてないユーザーで、Snowflakeに接続してワークブックを作成してみようとしてみます。

Tableau Desktopからの接続
Tableau DesktopからSnowflakeへOAuthで接続しようとすると、全ユーザーに必ず付与されているpublicロールが使われるように動作します。

また、接続後にウェアハウスも選択せずに可視化しようとすると、デフォルトのウェアハウスも指定されていないため下図のようにエラーが起きます。このため、基本的にTableauからSnowflakeへ接続する際は、デフォルトロールとデフォルトウェアハウスを各ユーザーに定義しておくことが非常に重要になります。


おまけ:使用できないロールでOAuth認証を行おうとした場合
更におまけなのですが、使用できないロールでOAuth認証を行おうとした場合にどうなるかを確認してみます。
Security Integration作成時にblocked_roles_listで指定したロール
Security Integration作成時にblocked_roles_listで指定したロールであるsysadminで認証しようとすると、MFAの認証後に下図のようにエラーが出ました。


OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LISTが有効化されている場合のaccountadmin等のロール
OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LISTで指定されているaccountadminのロールを指定して認証しようとすると、先ほどのblocked_roles_listのときと同様に、MFAの認証後に下図のようにエラーが出ました。


参考記事
今回の検証内容については既に以下の記事でも投稿されており、今回の私の検証においても参考にしております。ぜひこちらも併せてご覧ください。







