使用 Databricks JDBC 驱动程序 (OSS) 配置与 Databricks 的连接

本文介绍如何使用 Databricks JDBC 驱动程序 (OSS) 配置与 Databricks 的连接。

配置连接

若要使用 JDBC 驱动程序连接到 Azure Databricks 工作区,需要指定各种连接设置,例如 Azure Databricks 工作区的服务器主机名、计算资源设置和身份验证凭据以连接到工作区。

可以在 JDBC 连接 URL 上设置这些属性的值,设置并将其传递到 DriverManager.getConnection 方法,或结合两者。 请参阅提供程序的文档,以了解如何最好地使用特定应用、客户端、SDK、API 或 SQL 工具进行连接。

JDBC 连接 URL 必须采用以下格式。 属性不区分大小写。

jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];...

或者,使用 java.util.Properties 类或组合指定设置:

String url = "jdbc:databricks://<server-hostname>:<port>/<schema>";
Properties properties = new java.util.Properties();
properties.put("<property1>", "<value1");
properties.put("<property2>", "<value2");
// ...
Connection conn = DriverManager.getConnection(url, properties);
String url = "jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];";
Connection conn = DriverManager.getConnection(url, "token", "12345678901234667890abcdabcd");

下表描述了连接 URL 的元素。

有关其他属性的信息,包括身份验证属性、SQL 配置属性和日志记录属性,请参阅 支持的连接属性

注释

URL 元素和属性不区分大小写。

URL 元素或属性 DESCRIPTION
<server-hostname> Azure Databricks 计算资源的“服务器主机名”值。
<port> Azure Databricks 计算资源的端口值。 默认值是 443
<schema> 架构的名称。 此外,你还可以设置 ConnSchema 属性。 请参阅 支持的连接属性
httpPath Azure Databricks 计算资源的 HTTP 路径值。 连接器将 httpPath 值追加到连接 URL 中指定的主机和端口,形成要连接的 HTTP 地址。 例如,若要连接到 HTTP 地址 http://localhost:10002/cliservice,请使用以下连接 URL:jdbc:databricks://localhost:10002;httpPath=cliservice

若要获取 Azure Databricks 群集的 JDBC 连接 URL,请执行以下操作:

  1. 登录到 Azure Databricks 工作区。

  2. 在边栏中,单击“计算”,然后单击目标群集的名称。

  3. 在“配置”选项卡上,展开“高级选项”。

  4. 单击“JDBC/ODBC”选项卡

  5. 复制 JDBC URL 以用作 JDBC 连接 URL,或从“服务器主机名”、“端口”和“HTTP 路径”字段中的值构造 URL。

若要获取 Databricks SQL 仓库的 JDBC 连接 URL,请执行以下操作:

  1. 登录到 Azure Databricks 工作区。

  2. 在边栏中,单击“SQL 仓库”,然后单击目标仓库的名称。

  3. 单击“连接详细信息”选项卡。

  4. 复制 JDBC URL 以用作 JDBC 连接 URL,或从“服务器主机名”、“端口”和“HTTP 路径”字段中的值构造 URL。

配置代理连接

可以将连接器配置为通过代理服务器进行连接,而不是直接连接到 Databricks。 通过代理服务器进行连接时,连接器支持基本身份验证和 SPNEGO 身份验证。

配置代理连接:

  1. UseProxy 属性设置为 1。

  2. 若要在系统级别配置代理设置,请将 UseSystemProxy 属性设置为 1,否则按以下方式为驱动程序设置该属性:

    1. ProxyHost 属性设置为代理服务器的 IP 地址或主机名。
    2. ProxyPort 属性设置为代理服务器用于侦听客户端连接的端口。
    3. ProxyIgnoreList 属性设置为逗号分隔主机名。
    4. 使用代理服务器进行身份验证:
      • 使用基本身份验证
        1. ProxyAuth 属性设置为 1。
        2. ProxyUID 属性设置为用于访问服务器的用户名。
        3. ProxyPWD 属性设置为用于访问服务器的密码。
      • 若要使用 SPNEGO 身份验证,请执行以下作:
        1. 在系统级别验证 kerberos 主体身份。
        2. ProxyAuth 属性设置为 2。

若要专门对 CloudFetch 使用不同的代理,请使用以下属性执行上述步骤:UseCFProxy、、、CFProxyHostCFProxyPort、、 CFProxyAuthCFProxyUIDCFProxyPwd

配置 SSL

如果要连接到启用了安全套接字层 (SSL) 的 Databricks,则可以配置连接器以连接到已启用 SSL 的套接字。 通过 SSL 连接到服务器时,连接器使用单向身份验证来验证服务器的标识。

单向身份验证需要签名的受信任 SSL 证书来验证服务器的标识。 可以将连接器配置为访问包含相应证书的特定 TrustStore。 如果未指定 TrustStore,连接器将使用名为 jssecacerts 的默认 Java TrustStore。 如果 jssecacerts 不可用,则连接器将改用 cacerts。

配置 SSL:

  1. 将 SSL 属性设置为 1。

  2. 如果不使用默认 Java 信任存储之一,请创建信任存储并配置连接器以使用它:

    1. 创建包含已签名的受信任服务器证书的信任存储。
    2. 将 SSLTrustStore 属性设置为 TrustStore 的完整路径。
    3. 将 SSLTrustStorePwd 属性设置为用于访问 TrustStore 的密码。
    4. 如果 TrustStore 不是 JKS TrustStore,请将 SSLTrustStoreType 属性设置为正确的类型。 支持的类型包括:
      • SSLTrustStoreType=BCFKS (BouncyCastle FIPS 密钥存储)
      • SSLTrustStoreType=PKCS12 (公钥加密标准 #12)

在某些情况下,如果要更改证书吊销策略,连接器将提供以下参数:

  • 如果设置为 0,CheckCertRevocation 属性将接受已吊销的证书(默认值为 1)
    • 如果将 AcceptUndeterminedRevocation 属性设置为 1,该属性将接受我们无法确定吊销状态的证书(例如,CRLDP 不可访问或超时等)。此属性的默认值为 0

对驱动程序进行身份验证

可以使用以下身份验证机制之一对 JDBC 驱动程序连接进行身份验证:

OAuth 用户到计算机 (U2M) 身份验证

JDBC 驱动程序支持 OAuth 用户到机器 (U2M) 身份验证,以通过实时人工登录和同意来验证目标 Azure Databricks 用户帐户。 这也称为基于浏览器的 OAuth 身份验证。

Azure Databricks 已为客户了创建 OAuth 客户端 ID databricks-sql-jdbc。 这也是 JDBC 驱动程序中使用的默认 OAuth 客户端 ID。 若要配置 OAuth U2M 身份验证,只需将以下属性添加到现有的 JDBC 连接 URL 或 java.util.Properties 对象:

资产 价值
AuthMech 11
Auth_Flow 2
TokenCachePassPhrase 用于加密已缓存的 OAuth U2M 凭据的密码。 这可以防止重复基于浏览器的身份验证。 若要选择退出令牌缓存,请设置为 EnableTokenCache0

OAuth 计算机到计算机 (M2M) 身份验证

JDBC 驱动程序支持使用以下主体或标识之一进行 OAuth 计算机到计算机(M2M)身份验证,也称为 OAuth 2.0 客户端凭据 身份验证。 请参阅通过服务主体使用 OAuth 授权对 Azure Databricks 资源进行无须人工干预的访问

使用 Databricks 托管服务主体的 M2M

若要使用 Databricks 托管服务主体配置身份验证,请执行以下操作:

  1. 创建一个 Databricks 托管服务主体并将其分配给 Databricks 帐户和工作区。

  2. 为服务主体创建 Databricks OAuth 机密。 请参阅 OAuth M2M 设置指南

  3. 群集SQL 仓库授予访问权限。

  4. 将以下属性添加到你现有的 JDBC 连接 URL 或 java.util.Properties 对象:

资产 价值
AuthMech 11
Auth_Flow 1
OAuth2ClientID 服务主体的“应用程序(客户端)ID”值。
OAuth2Secret 服务主体的 Azure Databricks OAuth 机密。

使用 Azure 托管服务主体的 M2M

若要使用 Azure 托管服务主体配置身份验证,请执行以下作:

  1. 为服务主体创建 Databricks OAuth 机密。 请参阅 OAuth M2M 设置指南

  2. 群集SQL 仓库授予访问权限。

  3. 将以下属性添加到你现有的 JDBC 连接 URL 或 java.util.Properties 对象:

资产 价值
AuthMech 11
Auth_Flow 1
OAuth2ClientID 服务主体的“应用程序(客户端)ID”值。
AzureTenantID 在 Azure Active Directory 中找到的 Azure 租户 ID
OAuth2Secret 服务主体的 Azure Databricks OAuth 机密。

使用 Azure 托管标识的 M2M

若要使用 Azure 托管标识配置身份验证,请执行以下作:

  1. 为 Azure 资源配置托管标识

  2. 群集SQL 仓库授予访问权限。

  3. 将以下属性添加到你现有的 JDBC 连接 URL 或 java.util.Properties 对象:

资产 价值
AuthMech 11
Auth_Flow 3
OAuth2ClientID 托管标识的客户端 ID。 仅当使用用户分配的托管标识时,此参数才是必需的。
Azure_workspace_resource_id Databricks 工作区的 Azure 资源 ID

Azure Databricks 个人访问令牌

要使用 Azure Databricks 个人访问令牌对 JDBC 驱动程序连接进行身份验证,请将以下属性添加到 JDBC 连接 URL 或 java.util.Properties 对象:

资产 价值
AuthMech 3
user token,字符串形式。
PWDpassword 你的 Azure Databricks 个人访问令牌值,以字符串形式。