共用方式為


向資料庫執行個體進行驗證

這很重要

這項功能在下列區域中處於公開預覽狀態:westus、、westus2eastuseastus2centralussouthcentralusnortheuropewesteuropeaustraliaeastbrazilsouthcanadacentralcentralindia、、 southeastasiauksouth

此頁面描述如何向 Lakebase 資料庫實例進行驗證。 有兩種方式可以驗證:

  1. 取得 OAuth 令牌,並使用 Azure Databricks 身分識別進行驗證。
  2. 使用帶密碼的原生 Postgres 角色。

使用 Azure Databricks 身分識別進行驗證

當您以 Azure Databricks 身分識別進行驗證時,您需要產生 OAuth 令牌,並在連線到 Postgres 時將其當做密碼使用。

開始前的考慮

  • OAuth 令牌會在一小時后到期,但只會在登入時強制執行到期。 即使令牌過期,開啟的連線仍保持作用中。 不過,如果令牌過期,任何需要驗證的 PostgreSQL 命令都失敗。

  • 用於 Postgres 驗證的 OAuth 令牌是針對工作區的,且應該屬於擁有該資料庫實例的相同工作區。 不支援跨工作區令牌驗證。 若要深入了解驗證,請參閱 Databricks CLI 的驗證

  • 令牌型驗證需要純文本密碼,因此只允許 SSL 連線。 請確定您用來以令牌為基礎的驗證存取 Postgres 的用戶端連結庫已設定為建立 SSL 連線。

在用戶對系統流程中取得 OAuth 令牌

如果您是資料庫擁有者、系統管理員或 Azure Databricks 身分識別具有對應的資料庫實例 Postgres 角色,您可以從 UI、Databricks CLI 或其中一個 Databricks SDK 取得 OAuth 令牌。 您可以使用 Databricks CLI 適當地限制令牌的範圍。

如需其他 Azure Databricks 身分識別使用者,請參閱 使用 OAuth 授權使用者存取 Azure Databricks ,以取得 OAuth 令牌的工作區層級授權指示。

UI

當您的資料庫實例狀態可用時,請使用 Azure Databricks UI 來取得 OAuth 令牌:

  1. 在工作區側邊欄點選 「計算 」,然後點選「 Lakebase Provisioned」 標籤。
  2. 找到並點擊你想要取得 OAuth 代幣的資料庫實例名稱。
  3. 單擊 連線詳細資訊 索引標籤。
  4. 點擊 取得 OAuth 代幣。 旗標表示令牌建立的時間。
  5. 按兩下 [複製 OAuthToken ] 將令牌複製到剪貼簿。

CLI

當您的資料庫實例狀態可用時,請使用 Databricks CLI v0.256.0 和更新版本來取得 OAuth 令牌:

  1. 使用下列命令來擷取令牌。
     databricks database generate-database-credential \
       --request-id $(uuidgen) \
       --json '{
         "instance_names": ["db-instance-name"]
       }'
    
  2. 這會以下列格式產生回應。 複製token從回應中。
    {
      "expiration_time": "2025-08-24T14:15:22Z",
      "token": "<string>"
    }
    

如需使用 Databricks CLI 取得 OAuth 令牌的詳細資訊,請參閱 OAuth 使用者對電腦 (U2M) 驗證

Python SDK

您可以使用 適用於 Python 的 Databricks SDK 來產生 OAuth 令牌。 Azure Databricks SDK 綁定可在適用於 Python 的 Databricks SDK v0.56.0 版本中取得。

如果您使用舊版的 SDK 執行,請先執行這些命令。

%pip install --upgrade databricks-sdk
%restart_python

適用於 Python 的 Databricks SDK 會為您的資料庫實例產生安全的 OAuth 令牌 cred。 在需要時輸入您的認證。

from databricks.sdk import WorkspaceClient
import uuid

w = WorkspaceClient()

instance_name = "<YOUR INSTANCE>"

cred = w.database.generate_database_credential(request_id=str(uuid.uuid4()), instance_names=[instance_name])

Java 開發套件

您可以使用 適用於 Java 的 Databricks SDK 來產生 OAuth 令牌。 Databricks SDK for Java 0.53.0 版或更新版本提供資料庫 SDK 系結。 如果您使用舊版 SDK 執行,您可能需要重新整理匯入的 SDK。 如需詳細資訊,請參閱此處

%scala

import com.databricks.sdk.WorkspaceClient
import com.databricks.sdk.service.database.GetDatabaseInstanceRequest
import com.databricks.sdk.service.database.GenerateDatabaseCredentialRequest
import com.databricks.sdk.service.database.DatabaseInstance
import com.databricks.sdk.service.database.DatabaseCredential
import java.util.Collections
import java.util.UUID

val w = new WorkspaceClient()

val instanceName = "<YOUR INSTANCE>"

// Generate database credential
val cred = w.database().generateDatabaseCredential(
    new GenerateDatabaseCredentialRequest()
        .setRequestId(UUID.randomUUID().toString())
        .setInstanceNames(Collections.singletonList(instanceName))
)

// Print out credential details
System.out.println("Credential: " + cred.getToken())

在機器對機器的流程中獲取 OAuth 令牌

若要啟用資料庫實例的安全、自動化(機器對機器)存取,您必須使用 Azure Databricks 服務主體取得 OAuth 令牌。 此過程牽涉到設定服務主體、產生憑證,以及使用 OAuth 令牌進行驗證。

  1. 使用無限期存留的認證設定服務主體。 如需指示,請參閱使用 OAuth 授權服務主體存取 Azure Databricks

  2. 將新的 OAuth 令牌 Mint 作為服務主體。

    CLI

    當您的資料庫實例狀態可用時,請使用 Databricks CLI v0.256.0 和更新版本來取得 OAuth 令牌:

    1. 使用下列命令來擷取令牌。

        databricks database generate-database-credential \
          --request-id $(uuidgen) \
          --json '{
            "instance_names": ["db-instance-name"]
          }'
      
    2. 這會以下列格式產生回應。 複製token從回應中。

      {
        "expiration_time": "2025-08-24T14:15:22Z",
        "token": "<string>"
      }
      

    Python SDK

    您可以使用 適用於 Python 的 Databricks SDK 來產生 OAuth 令牌。 Azure Databricks SDK 綁定可在適用於 Python 的 Databricks SDK v0.56.0 版本中取得。

    如果您使用舊版的 SDK 執行,請先執行這些命令。

    %pip install --upgrade databricks-sdk
    %restart_python
    

    適用於 Python 的 Databricks SDK 會為您的資料庫實例產生安全的 OAuth 令牌 cred。 視需要輸入您的資料庫實例名稱。

    from databricks.sdk import WorkspaceClient
    import uuid
    
    w = WorkspaceClient(
      host          = "https://<YOUR WORKSPACE URL>/",
      client_id     = "<YOUR SERVICE PRINCIPAL ID>",
      client_secret = "REDACTED"
    )
    
    instance_name = "<YOUR INSTANCE>"
    
    cred = w.database.generate_database_credential(request_id=str(uuid.uuid4()), instance_names=[instance_name])
    

    Java 開發套件

    您可以使用 適用於 Java 的 Databricks SDK 來產生 OAuth 令牌。 Databricks SDK for Java 0.53.0 版或更新版本提供資料庫 SDK 系結。 如果您使用舊版 SDK 執行,則可能需要更新至較新的 SDK。 如需詳細資訊,請參閱此處

    %scala
    
    import com.databricks.sdk.WorkspaceClient
    import com.databricks.sdk.core.DatabricksConfig
    import com.databricks.sdk.service.database.GetDatabaseInstanceRequest
    import com.databricks.sdk.service.database.GenerateDatabaseCredentialRequest
    import com.databricks.sdk.service.database.DatabaseInstance
    import com.databricks.sdk.service.database.DatabaseCredential
    import java.util.Collections
    import java.util.UUID
    
    val config = new DatabricksConfig() // See https://github.com/databricks/databricks-sdk-java#authentication
    val w = new WorkspaceClient(config)
    
    val instanceName = "<YOUR INSTANCE>"
    
    // Generate database credential
    val cred = w.database().generateDatabaseCredential(
        new GenerateDatabaseCredentialRequest()
            .setRequestId(UUID.randomUUID().toString())
            .setInstanceNames(Collections.singletonList(instanceName))
    )
    
    // Print out credential details
    System.out.println("Credential: " + cred.getToken())
    

備註

在每小時到期前輪替 OAuth 令牌:

  • 檢查每次使用時 OAuth 令牌的到期時間,並視需要重新整理。
  • 或者,設定背景執行緒,以定期重新整理目前的 OAuth 令牌。

疑難排解令牌身分識別

如果您的權杖身分識別與安全性標籤不符,您可能會收到類似下列的錯誤訊息。

A valid oauth token was supplied but the token's identity "<USER>" did not match the security label configured for role "<SERVICE PRINCIPAL>". Please ensure that the token is generated for the correct databricks identity.

執行下列命令,以檢查傳回的 Azure Databricks 身分識別:

CLI

databricks current-user me

Python SDK

w.current_user.me().user_name

Java 開發套件

w.currentUser.me().getUserName()

如果未傳回預期的身分識別,請確認在初始化工作區用戶端時使用了正確的認證。

使用 Microsoft Entra 識別碼進行驗證

針對 Azure Databricks,Microsoft Entra 識別碼身分識別和令牌也可用來向 Azure Databricks API 進行驗證。 使用這些 API 來取得權杖,以向 Postgres 進行驗證。

如需如何在 Azure Databricks 中管理Microsoft Entra ID 受控識別,請參閱 管理用戶、服務主體和群組 。 您可以在 Azure Databricks 中建立來自 Microsoft Entra ID 的使用者、群組和服務主體。 將這些身分識別新增至 Azure Databricks 之後,您可以將它們新增至資料庫執行個體,如 管理 Postgres 角色中所述。

若要擷取 Microsoft Entra ID 代幣,請參閱下列資訊:

以 Azure Databricks 群組身分進行驗證

群組和群組成員資格不會從 Azure Databricks 同步至 Postgres,Unity 目錄授權也不會同步處理。 不過,將 Azure Databricks 群組新增至 Postgres 之後,群組中的任何 Azure Databricks 使用者都可以使用使用者的密碼以群組身分登入。 這可讓您在 Postgres 中管理群組層級的權限。 Azure Databricks 群組身分識別的任何直接或間接成員 (使用者或服務主體) 都可以向 Postgres 進行驗證,並以 Azure Databricks 群組 Postgres 角色身分登入。

使用使用者或服務主體權杖以群組身分識別身分驗證時,只會在驗證時驗證群組成員資格。 如果成員在驗證後從群組中移除,則與群組成員權杖的任何開啟連線都會保持開啟狀態。 在驗證期間,來自已移除群組成員的任何新連線要求都會被拒絕。

export PGPASSWORD='<OAuth token of a group member>'
export GROUPROLENAME=<pg-case-sensitive-group-role-name>

psql -h $HOSTNAME -p 5432 -d databricks_postgres -U $GROUPROLENAME

只有指派給資料庫執行個體 Azure Databricks 工作區的群組才支援群組型 Postgres 登入。 若要瞭解如何將群組指派給工作區,請參閱 將群組指派給工作區

使用 Postgres 角色和密碼進行驗證

如果您有在一小時后不支持認證輪替的用戶端,您可以使用密碼建立原生 Postgres 角色:

  1. 在工作區側邊欄中按下 [計算]

  2. 依序點擊資料庫實例索引標籤。

  3. 選取您要更新的資料庫實例。

  4. 按下右上方的 [編輯 ]。

  5. 開啟 [啟用 Postgres 原生角色登入]。

  6. 點選 [儲存]。

  7. 登入 Postgres 或使用 SQL 編輯器建立具有密碼的角色。

    CREATE ROLE new_role LOGIN PASSWORD 'your strong password';
    
  8. 將其他 Postgres 許可權授與新角色。 請參閱如何使用 PostgreSQL 配置 Postgres 角色的權限。

後續步驟

取得認證 (OAuth 令牌或密碼) 之後,您可以連線到您的資料庫實例: