Databricks JDBCドライバーの認証設定
Databricks JDBCドライバは、使用状況に応じて複数の認証方法をサポートしています。このページでは、各メソッドの設定方法と、必要な接続プロパティについて説明します。
Databricks JDBCドライバの認証を設定するには、以下のいずれかの方法を使用します。
- OAuth 2.0 パスワード パススルー(外部 ID プロバイダーとの内部フェデレーションを含む)
- OAuthユーザーマシン間 (U2M) 認証
- OAuthマシン間 (M2M) 認証
- Databricksパーソナルアクセストークン
OAuth 2.0 パススルー
JDBCドライバーは、 Auth_AccessTokenプロパティでOAuth受け入れます。 Databricks OAuthウイルスを直接渡すことも、外部 ID プロバイダーからJSON Web ウイルス (JWT) を渡すこともできます。 外部 IdP を渡すと、 Databricksそれを、 VPN フェデレーションを使用してDatabricks VPN に自動的に交換します。
以下の例では、次のプレースホルダーを置き換えてください。
<oauth-token>Databricks OAuth 2.0 または外部 IdP JWT を使用します。<server-hostname>と<http-path>の値を取得するには、 「Databricks JDBC ドライバーを使用して Databricks への接続を構成する」を参照してください。
必要なプロパティは以下のとおりです。
AuthMech11に設定(OAuth 2.0認証)Auth_Flow0に設定(トークンパススルーモード)Auth_AccessTokenDatabricks OAuthまたは外部 IdP JWT に設定
認証プロパティを参照してください。
JDBC接続URLの場合:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>;AuthMech=11;Auth_Flow=0;Auth_AccessToken=<oauth-token>
Javaコードでは:
// ...
String url = "jdbc:databricks://<server-hostname>:443";
Properties p = new java.util.Properties();
p.put("httpPath", "<http-path>");
p.put("AuthMech", "11");
p.put("Auth_Flow", "0");
p.put("Auth_AccessToken", "<oauth-token>");
// ...
Connection conn = DriverManager.getConnection(url, p);
// ...
外部IDプロバイダーとのトークンフェデレーション
Okta、Microsoft Entra ID、Keycloak、またはOIDC準拠のIDプロバイダーなど、外部のIDプロバイダーからのトークンを使用して認証を行う場合、Databricksはトークン交換を自動的に実行します。JDBCの設定はトークンパススルーと同じです。IdP をAuth_AccessTokenに渡すと、ドライバが残りの処理を行います。
トークンフェデレーションを使用する前に、以下のことを行う必要があります。
- 外部 IdP を信頼するフェデレーション ポリシーをDatabricksアカウントに作成します。 フェデレーションポリシーでは、発行者URL、想定されるオーディエンス値、およびDatabricksユーザーにマッピングするために使用されるJWTクレームを指定します。OAuth内部フェデレーションを使用したDatabricksへのアクセスの認証」を参照してください。
- 一致するDatabricksユーザーが存在することを確認してください。ユーザーのEメールまたはその他の識別子は、JWT内の
subject_claim値と一致する必要があります。 - Databricksがトークンを検証するための署名キーを取得できるよう、IdPのOIDC検出エンドポイントがパブリックにアクセス可能であることを確認してください。
OAuth ユーザーマシン間 (U2M) 認証
OAuth U2M認証を使用すると、ブラウザ経由でDatabricksにサインインできます。ドライバーがブラウザウィンドウを開き、認証を行うと、ドライバーはOAuth受け取ります。 ドライバーは組み込みの OAuth クライアント ID databricks-sql-jdbcを使用します。
この認証タイプには前提条件はありません。トークンの有効期限はデフォルトで1時間で、期限切れになると自動的に更新されます。
OAuth U2Mは、ローカルで実行されるアプリケーションでのみ動作します。サーバーベースまたはクラウドベースのアプリケーションでは動作しません。
以下の例では、次のプレースホルダーを置き換えてください。
<passphrase>ご自身で設定したパスフレーズで。ドライバーはこのキーを更新時の暗号化に使用します。<server-hostname>と<http-path>の値を取得するには、 「Databricks JDBC ドライバーを使用して Databricks への接続を構成する」を参照してください。
必要なプロパティは以下のとおりです。
AuthMech11に設定(OAuth 2.0認証)Auth_Flow2に設定(U2Mブラウザベースモード)TokenCachePassPhraseキャッシュされたOAuth U2M認証情報を暗号化するために使用されるパスフレーズを設定します。これにより、ブラウザベースの認証が繰り返し行われるのを防ぎます。トークンのキャッシュを無効にするには、EnableTokenCacheを0に設定してください。
認証プロパティを参照してください。
JDBC接続URLの場合:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>;AuthMech=11;Auth_Flow=2;TokenCachePassPhrase=<passphrase>;EnableTokenCache=0
Javaコードでは:
// ...
String url = "jdbc:databricks://<server-hostname>:443";
Properties p = new java.util.Properties();
p.put("httpPath", "<http-path>");
p.put("AuthMech", "11");
p.put("Auth_Flow", "2");
p.put("TokenCachePassPhrase", "<passphrase>");
p.put("EnableTokenCache", "0");
// ...
Connection conn = DriverManager.getConnection(url, p);
// ...
OAuthによるマシン間(M2M)認証
JDBCドライバーは、 Databricksサービス プリンシパルを使用したOAuthマシン間 (M2M) 認証OAuth 2.0 クライアント資格情報 認証とも呼ばれます) をサポートします。 「 OAuthを使用したDatabricksへのサービスプリンシパル アクセスの承認」を参照してください。
M2M認証を設定するには:
- DatabricksワークスペースにDatabricksプリンシパルを作成します。 「 OAuthを使用したDatabricksへのサービスプリンシパル アクセスの承認」を参照してください。
- サービスプリンシパル用のOAuthシークレットを作成します。 UUID または アプリケーションID と シークレット 値をメモしておいてください。
- サービスプリンシパルにクラスターまたはウェアハウスへのアクセス権を付与します。 コンピュートの権限またはSQLウェアハウスの管理を参照してください。
以下の例では、次のプレースホルダーを置き換えてください。
<service-principal-application-id>サービスプリンシパルの UUID または アプリケーションID を使用します。<service-principal-oauth-secret>サービスプリンシパルのOAuth シークレット を使用します。<server-hostname>と<http-path>の値を取得するには、 「Databricks JDBC ドライバーを使用して Databricks への接続を構成する」を参照してください。
必要なプロパティは以下のとおりです。
AuthMech11に設定(OAuth 2.0認証)Auth_Flow1に設定(M2Mクライアント認証情報モード)OAuth2ClientIDサービスプリンシパルの UUID または アプリケーションIDの 値に設定します。OAuth2SecretサービスプリンシパルのOAuth シークレット 値に設定します
認証プロパティを参照してください。
JDBC接続URLの場合:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>;AuthMech=11;Auth_Flow=1;OAuth2ClientId=<service-principal-application-id>;OAuth2Secret=<service-principal-oauth-secret>
Javaコードでは:
// ...
String url = "jdbc:databricks://<server-hostname>:443";
Properties p = new java.util.Properties();
p.put("httpPath", "<http-path>");
p.put("AuthMech", "11");
p.put("Auth_Flow", "1");
p.put("OAuth2ClientId", "<service-principal-application-id>");
p.put("OAuth2Secret", "<service-principal-oauth-secret>");
// ...
Connection conn = DriverManager.getConnection(url, p);
// ...
Databricksの個人アクセストークン
個人用アクセストークンは、テストシナリオに最適です。Databricks 、本番運用シナリオでは、より安全な認証タイプを推奨します。
Databricksの個人アクセス ノートを作成するには、 「ワークスペース ユーザー向けの個人アクセス ノートを作成する」のステップに従います。
以下の例では、次のプレースホルダーを置き換えてください。
<personal-access-token>ワークスペースユーザー用のDatabricksパーソナルアクセストークンを使用します。<server-hostname>と<http-path>の値を取得するには、 「Databricks JDBC ドライバーを使用して Databricks への接続を構成する」を参照してください。
必要なプロパティは以下のとおりです。
AuthMech3に設定(トークン認証)UIDリテラル文字列に設定tokenPWDまたはpasswordDatabricksの個人アクセストークンの値に設定します。
認証プロパティを参照してください。
JDBC接続URLの場合:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>;AuthMech=3;UID=token;PWD=<personal-access-token>
Javaコードでは:
// ...
String url = "jdbc:databricks://<server-hostname>:443";
Properties p = new java.util.Properties();
p.put("httpPath", "<http-path>");
p.put("AuthMech", "3");
p.put("UID", "token");
p.put("PWD", "<personal-access-token>");
// ...
Connection conn = DriverManager.getConnection(url, p);
// ...