Databricks JDBC 驅動程式的驗證設定
本文說明如何設定 Databricks JDBC 驅動程式的 Azure Databricks 驗證設定。
若要設定 Databricks JDBC 驅動程式的 Azure Databricks 連線,您必須將計算資源設定、任何驅動程式功能設定,以及下列驗證設定合併為一個 JDBC 連線 URL 或 JDBC 連線屬性的程式設計集合。
JDBC 連線 URL 使用下列格式:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>]
- 若要取得
<server-hostname>
和<http-path>
的值,請參閱 Databricks JDBC 驅動程式的計算設定。 - 視需要取代下列各節所列的各個連線屬性的
<setting>=<value>
。 - 您也可以新增特殊或進階驅動程式功能設定。
JDBC 連接屬性的程式設計集合可用於 Java 程式碼,例如下列範例:
package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws Exception {
Class.forName("com.databricks.client.jdbc.Driver");
String url = "jdbc:databricks://" + System.getenv("DATABRICKS_SERVER_HOSTNAME") + ":443";
Properties p = new java.util.Properties();
p.put("httpPath", System.getenv("DATABRICKS_HTTP_PATH"));
p.put("<setting1>", "<value1");
p.put("<setting2>", "<value2");
p.put("<settingN>", "<valueN");
try (Connection conn = DriverManager.getConnection(url, p)) {
Statement stmt = conn.createStatement();
try (ResultSet rs = stmt.executeQuery("<query>")) {
ResultSetMetaData md = rs.getMetaData();
String[] columns = new String[md.getColumnCount()];
for (int i = 0; i < columns.length; i++) {
columns[i] = md.getColumnName(i + 1);
}
while (rs.next()) {
System.out.print("Row " + rs.getRow() + "=[");
for (int i = 0; i < columns.length; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(columns[i] + "='" + rs.getObject(i + 1) + "'");
}
System.out.println(")]");
}
}
}
System.exit(0);
}
}
- 將
DATABRICKS_SERVER_HOSTNAME
和DATABRICKS_HTTP_PATH
環境值分別設定為目標 Azure Databricks 計算資源的 [伺服器主機名] 和 [HTTP 路徑] 值。 若要取得這些值,請參閱 Databricks JDBC 驅動程式的計算設定。 若要設定環境變數,請參閱您的作業系統文件。 - 視需要取代下列各節所列的各個連線屬性的
<setting>
和<value>
。 - 您也可以新增特殊或進階驅動程式功能設定,這通常是額外的
<setting>
和<value>
配對。 - 在此範例中,將
<query>
取代為 SQLSELECT
查詢字串。
無論您使用連線 URL 或連線屬性集合,都取決於目標應用程式、工具、用戶端、SDK 或 API 的需求。 本文針對每個支援的 Azure Databricks 驗證類型,提供了 JDBC 連線 URL 和 JDBC 連線屬性的程式設計集合範例。
Databricks JDBC 驅動程式支援下列 Azure Databricks 驗證類型:
Microsoft Entra ID 權杖
ODBC 和 JDBC 驅動程式 2.6.15 和更新版本支援 Azure Databricks 使用者或 Microsoft Entra ID 服務主體的 Microsoft Entra ID 權杖。
若要建立 Microsoft Entra ID 存取權杖,請按照下列步驟操作:
- 針對 Azure Databricks 使用者,您可使用 Azure CLI。 請參閱使用 Azure CLI 取得使用者的 Microsoft Entra ID 權杖。
- 如需 Microsoft Entra ID 服務主體,請參閱使用 Azure CLI 取得Microsoft Entra ID 存取權杖。 若要建立 Microsoft Entra ID 受控服務主體,請參閱管理服務主體。
Microsoft Entra ID 存取權杖的預設存留期約為 1 小時。 您可以透過執行重新整理 Microsoft Entra ID 存取權杖中的程式碼,以程式設計方式重新整理現有工作階段的存取權杖,而不會中斷連線。 如需如何重新整理權杖的指示,請參閱 Configuring Authentication > Using OAuth 2.0
中的 一節。
若要使用 Microsoft Entra ID 權杖進行驗證,請設定下列組態。
針對具有內嵌一般組態屬性和敏感性認證屬性的 JDBC 連線 URL:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>;AuthMech=11;Auth_Flow=0;Auth_AccessToken=<microsoft-entra-id-token>
針對在 JDBC 連線 URL 外部設定一般組態屬性和敏感性認證屬性的 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", "<microsoft-entra-id-token>");
// ...
Connection conn = DriverManager.getConnection(url, p);
// ...
- 如需您可以根據自己的需求調整上述程式碼片段的完整 Java 程式碼範例,請參閱本文開頭的程式碼範例。
- 在上述 URL 或 Java 程式碼中,將
<microsoft-entra-id-token>
取代為 Microsoft Entra ID 權杖。 - 若要取得
<server-hostname>
和<http-path>
的值,請參閱 Databricks JDBC 驅動程式的計算設定。
如需詳細資訊,請參閱 Token Pass-through
中的 一節。
OAuth 2.0 權杖
JDBC 驅動程式 2.6.36 和更新版本支援 Microsoft Entra ID 服務主體的 OAuth 2.0 權杖。 這也稱為 OAuth 2.0 權杖傳遞驗證。
- 若要為 Microsoft Entra ID 服務主體建立用於權杖傳遞驗證的 OAuth 2.0 權杖,請參閱手動產生和使用 OAuth M2M 驗證的存取權杖。 記下服務主體的 OAuth
access_token
值。 - 若要建立 Microsoft Entra ID 受控服務主體,請參閱管理服務主體。
重要
JDBC 驅動程式 2.6.36 和更新版本支援使用 Azure Databricks OAuth 祕密來建立 OAuth 2.0 權杖。 不支援 Microsoft Entra ID 秘密。
OAuth 2.0 權杖的預設存留期為 1 小時。 若要產生新的 OAuth 2.0 權杖,請重複此程序。
若要使用 OAuth 2.0 權杖傳遞驗證進行驗證,請設定下列組態。
針對具有內嵌一般組態屬性和敏感性認證屬性的 JDBC 連線 URL:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>;AuthMech=11;Auth_Flow=0;Auth_AccessToken=<oauth-token>
針對在 JDBC 連線 URL 外部設定一般組態屬性和敏感性認證屬性的 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);
// ...
- 如需您可以根據自己的需求調整上述程式碼片段的完整 Java 程式碼範例,請參閱本文開頭的程式碼範例。
- 在上述 URL 或 Java 程式碼中,將
<oauth-token>
取代為 Azure Databricks OAuth 權杖。 (OAuth 2.0 權杖傳遞驗證不支援 Microsoft Entra ID 權杖)。 - 若要取得
<server-hostname>
和<http-path>
的值,請參閱 Databricks JDBC 驅動程式的計算設定。
如需詳細資訊,請參閱 Token Pass-through
中的 一節。
OAuth 使用者對機器 (U2M) 驗證
JDBC 驅動程式 2.6.36 和更新版本支援 Azure Databricks 使用者的 OAuth 使用者對機器 (U2M) 驗證。 這也稱為 OAuth 2.0 瀏覽器型驗證。
OAuth U2M 或 OAuth 2.0 瀏覽器型驗證沒有必要條件。 OAuth 2.0 權杖的預設存留期為 1 小時。 OAuth U2M 或 OAuth 2.0 瀏覽器型驗證應該會自動為您重新整理過期的 OAuth 2.0 權杖。
注意
OAuth U2M 或 OAuth 2.0 瀏覽器型驗證僅適用於在本機執行的應用程式。 它不適用於伺服器型或雲端式應用程式。
若要使用 OAuth 使用者對機器 (U2M) 或 OAuth 2.0 瀏覽器型驗證進行驗證,請設定下列設定。
針對具有內嵌一般組態屬性和敏感性認證屬性的 JDBC 連線 URL:
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>;AuthMech=11;Auth_Flow=2;TokenCachePassPhrase=<passphrase>;EnableTokenCache=0
針對在 JDBC 連線 URL 外部設定一般組態屬性和敏感性認證屬性的 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);
// ...
- 如需您可以根據自己的需求調整上述程式碼片段的完整 Java 程式碼範例,請參閱本文開頭的程式碼範例。
- 在上述 URL 或 Java 程式碼中,以您選擇的複雜密碼取代
<passphrase>
。 驅動程式會使用此金鑰進行重新整理權杖加密。 - 若要取得
<server-hostname>
和<http-path>
的值,請參閱 Databricks JDBC 驅動程式的計算設定。
如需詳細資訊,請參閱 Using Browser Based Authentication
中的 一節。
OAuth 機器對機器 (M2M) 驗證
JDBC 驅動程式 2.6.36 和更新版本支援針對 Microsoft Entra ID 服務主體的 OAuth 機器對機器 (M2M) 驗證。 這也稱為 OAuth 2.0 用戶端認證驗證。
注意
不支援 JDBC 2.6.40.1071 解決舊版使用 M2M 進行私人連結工作區連線的問題。
若要設定 OAuth M2M 或 OAuth 2.0 用戶端認證驗證,請執行下列動作:
建立 Microsoft Entra ID 受控服務主體,然後將其指派給 Azure Databricks 帳戶和工作區。 為此,請參閱管理服務主體。
重要
JDBC driver 2.6.36 和更新版本支援適用於 OAuth M2M 或 OAuth 2.0 用戶端認證驗證的 Azure Databricks OAuth 祕密。 不支援 Microsoft Entra ID 秘密。
建立服務主體的 Azure Databricks OAuth 秘密。 若要這樣做,請參閱手動產生和使用 OAuth M2M 驗證的存取權杖。
若要使用 OAuth 機器對機器 (M2M) 或 OAuth 2.0 用戶端認證驗證進行驗證,請設定下列組態。
針對具有內嵌一般組態屬性和敏感性認證屬性的 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>
針對在 JDBC 連線 URL 外部設定一般組態屬性和敏感性認證屬性的 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);
// ...
- 如需您可以根據自己的需求調整上述程式碼片段的完整 Java 程式碼範例,請參閱本文開頭的程式碼範例。
- 在上述 URL 或 Java 程式碼中,取代下列預留位置:
- 以服務主體的
<service-principal-application-id>
值取代 。 - 以服務主體的 Azure Databricks OAuth 祕密取代
<service-principal-oauth-secret>
。 (OAuth M2M 或 OAuth 2.0 用戶端認證驗證不支援 Microsoft Entra ID 秘密。) - 若要取得
<server-hostname>
和<http-path>
的值,請參閱 Databricks JDBC 驅動程式的計算設定。
- 以服務主體的