Condividi tramite


Eseguire l'autenticazione in un'istanza del database

Importante

Questa funzionalità è disponibile in anteprima pubblica nelle aree seguenti: westus, westus2, eastus, eastus2, centralus, southcentralusnortheuropewesteuropeaustraliaeastbrazilsouthcanadacentralcentralindiasoutheastasia. uksouth

Questa pagina descrive come eseguire l'autenticazione in un'istanza del database Lakebase. Esistono due modi per eseguire l'autenticazione:

  1. Ottenere un token OAuth ed eseguire l'autenticazione usando le identità di Azure Databricks.
  2. Usare ruoli Postgres nativi con password.

Eseguire l'autenticazione con le identità di Azure Databricks

Quando si esegue l'autenticazione come identità di Azure Databricks, è necessario generare un token OAuth e usarlo come password durante la connessione a Postgres.

Considerazioni prima di iniziare

  • I token OAuth scadono dopo un'ora, ma la scadenza viene applicata solo all'account di accesso. Le connessioni aperte rimangono attive anche se il token scade. Tuttavia, qualsiasi comando PostgreSQL che richiede l'autenticazione non riesce se il token è scaduto.

  • I token OAuth usati per l'autenticazione Postgres sono con ambito area di lavoro e devono appartenere alla stessa area di lavoro proprietaria dell'istanza del database. L'autenticazione token tra aree di lavoro non è supportata. Per altre informazioni sull'autenticazione, vedere Autenticazione per l'interfaccia della riga di comando di Databricks.

  • L'autenticazione basata su token richiede una password in testo non crittografato, pertanto sono consentite solo le connessioni SSL. Assicurarsi che la libreria client usata per accedere a Postgres con l'autenticazione basata su token sia configurata per stabilire una connessione SSL.

Ottenere un token OAuth in un flusso utente-macchina

Se si è un proprietario del database, un amministratore o l'identità di Azure Databricks ha un ruolo Postgres corrispondente per l'istanza del database, è possibile ottenere un token OAuth dall'interfaccia utente, dall'interfaccia della riga di comando di Databricks o da uno degli SDK di Databricks. È possibile limitare l'ambito del token in modo appropriato usando l'interfaccia della riga di comando di Databricks.

Per altri utenti di identità di Azure Databricks, vedere Autorizzare l'accesso utente ad Azure Databricks con OAuth per le istruzioni di autorizzazione a livello di area di lavoro per ottenere i token OAuth.

INTERFACCIA UTENTE

Quando lo stato dell'istanza del database è disponibile, usare l'interfaccia utente di Azure Databricks per ottenere un token OAuth:

  1. Fare clic su Calcolo nella barra laterale dell'area di lavoro e sulla scheda Lakebase Provisioned.
  2. Trovare e fare clic sul nome dell'istanza del database per cui si vuole ottenere un token OAuth.
  3. Clicca sulla scheda dettagli della connessione.
  4. Fare clic su Ottieni token OAuth. Un flag indica quando il token è stato creato.
  5. Fare clic su Copia OAuthToken per copiare il token negli Appunti.

CLI

Quando lo stato dell'istanza del database è Disponibile, usare l'interfaccia della riga di comando di Databricks v0.256.0 e versioni successive per ottenere un token OAuth:

  1. Usare il comando seguente per recuperare un token.
     databricks database generate-database-credential \
       --request-id $(uuidgen) \
       --json '{
         "instance_names": ["db-instance-name"]
       }'
    
  2. In questo modo viene generata una risposta nel formato seguente. Copiare il valore token della risposta.
    {
      "expiration_time": "2025-08-24T14:15:22Z",
      "token": "<string>"
    }
    

Per altre informazioni sull'uso dell'interfaccia della riga di comando di Databricks per ottenere un token OAuth, vedere Autenticazione da utente a computer (U2M) OAuth.

Python SDK

È possibile generare un token OAuth usando Databricks SDK per Python. Le binding di Azure Databricks SDK sono disponibili in Databricks SDK per Python versione v0.56.0.

Se si esegue con una versione precedente dell'SDK, eseguire prima questi comandi.

%pip install --upgrade databricks-sdk
%restart_python

Databricks SDK per Python genera un token OAuth sicuro, cred, per l'istanza del database. Immettere le credenziali dove necessario.

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 SDK

È possibile generare un token OAuth usando Databricks SDK per Java. Le associazioni di Database SDK sono disponibili in Databricks SDK per Java versione 0.53.0 o successiva. Se si esegue con una versione precedente dell'SDK, potrebbe essere necessario aggiornare l'SDK importato. Per ulteriori informazioni, vedi qui.

%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())

Ottenere un token OAuth in un flusso da macchina a macchina

Per abilitare l'accesso sicuro e automatizzato (da macchina a macchina) all'istanza del database, è necessario ottenere un token OAuth utilizzando un principal del servizio di Azure Databricks. Questo processo comporta la configurazione dell'entità servizio, la generazione di credenziali e la creazione di token OAuth per l'autenticazione.

  1. Configurare un principale del servizio con credenziali a tempo indeterminato. Per istruzioni, vedere Autorizzare l'accesso dell'entità servizio ad Azure Databricks con OAuth.

  2. Generare nuovi token OAuth come principale del servizio.

    CLI

    Quando lo stato dell'istanza del database è Disponibile, usare l'interfaccia della riga di comando di Databricks v0.256.0 e versioni successive per ottenere un token OAuth:

    1. Usare il comando seguente per recuperare un token.

        databricks database generate-database-credential \
          --request-id $(uuidgen) \
          --json '{
            "instance_names": ["db-instance-name"]
          }'
      
    2. In questo modo viene generata una risposta nel formato seguente. Copiare il valore token della risposta.

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

    Python SDK

    È possibile generare un token OAuth usando Databricks SDK per Python. Le binding di Azure Databricks SDK sono disponibili in Databricks SDK per Python versione v0.56.0.

    Se si esegue con una versione precedente dell'SDK, eseguire prima questi comandi.

    %pip install --upgrade databricks-sdk
    %restart_python
    

    Databricks SDK per Python genera un token OAuth sicuro, cred, per l'istanza del database. Immettere il nome dell'istanza del database, se necessario.

    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 SDK

    È possibile generare un token OAuth usando Databricks SDK per Java. Le associazioni di Database SDK sono disponibili in Databricks SDK per Java versione 0.53.0 o successiva. Se si esegue con una versione precedente dell'SDK, potrebbe essere necessario eseguire l'aggiornamento a un SDK più recente. Per ulteriori informazioni, vedi qui.

    %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())
    

Annotazioni

Ruotare i token OAuth prima della scadenza oraria:

  • Controllare l'ora di scadenza del token OAuth in ogni uso e aggiornare quando necessario.
  • In alternativa, configurare un thread in background per aggiornare periodicamente il token OAuth corrente.

Risolvere i problemi relativi all'identità del token

Se l'identità del token non corrisponde all'etichetta di sicurezza, è possibile che venga visualizzato un messaggio di errore simile al seguente.

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.

Eseguire il comando seguente per verificare quale identità di Azure Databricks viene restituita:

CLI

databricks current-user me

Python SDK

w.current_user.me().user_name

Java SDK

w.currentUser.me().getUserName()

Se l'identità prevista non viene restituita, verificare che le credenziali corrette siano state usate durante l'inizializzazione del client dell'area di lavoro.

Eseguire l'autenticazione con Microsoft Entra ID

Per Azure Databricks, è anche possibile usare identità e token di Microsoft Entra ID per l'autenticazione nelle API di Azure Databricks. Usare queste API per ottenere un token per l'autenticazione in Postgres.

Vedere Gestire utenti, entità servizio e gruppi per informazioni su come gestire le identità gestite dell'ID Entra di Microsoft in Azure Databricks. Gli utenti, i gruppi e le entità servizio di Microsoft Entra ID possono essere creati in Azure Databricks. Dopo aver aggiunto queste identità ad Azure Databricks, è possibile aggiungerle all'istanza del database come descritto in Gestire i ruoli Postgres.

Per recuperare i token ID di Microsoft Entra, vedere quanto segue:

Eseguire l'autenticazione come gruppo di Azure Databricks

I gruppi e le appartenenze ai gruppi non vengono sincronizzati da Azure Databricks in Postgres e neanche le autorizzazioni di Unity Catalog. Tuttavia, dopo l'aggiunta di un gruppo di Azure Databricks in Postgres, qualsiasi utente di Azure Databricks nel gruppo può accedere come gruppo usando la password dell'utente. In questo modo è possibile gestire le autorizzazioni a livello di gruppo in Postgres. Qualsiasi membro diretto o indiretto (utente o entità servizio) dell'identità del gruppo di Azure Databricks può autenticarsi su Postgres e accedere come ruolo Postgres del gruppo di Azure Databricks.

Quando si esegue l'autenticazione come identità di gruppo usando un token utente o un principale del servizio, l'appartenenza al gruppo viene convalidata solo al momento dell'autenticazione. Qualsiasi connessione aperta con un token membro del gruppo rimane aperta se il membro viene rimosso dal gruppo dopo l'autenticazione. Qualsiasi nuova richiesta di connessione da un membro del gruppo rimosso viene rifiutata durante l'autenticazione.

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

Solo i gruppi assegnati all'area di lavoro di Azure Databricks dell'istanza del database sono supportati per l'accesso postgres basato su gruppo. Per informazioni su come assegnare un gruppo a un'area di lavoro, vedere Assegnare un gruppo a un'area di lavoro.

Eseguire l'autenticazione con ruoli e password Postgres

Se si dispone di client che non supportano la rotazione delle credenziali dopo un'ora, è possibile creare ruoli Postgres nativi con password:

  1. Nella barra laterale dell’area di lavoro fare clic su Calcola.

  2. Fare clic sulla scheda Istanze di database .

  3. Selezionare l'istanza del database da aggiornare.

  4. Fare clic su Modifica in alto a destra.

  5. Attivare Enable Postgres Native Role Login (Abilita accesso ruolo nativo Postgres).

  6. Fare clic su Salva.

  7. Accedere a Postgres o usare l'editor SQL per creare un ruolo con una password.

    CREATE ROLE new_role LOGIN PASSWORD 'your strong password';
    
  8. Concedere autorizzazioni Postgres aggiuntive al nuovo ruolo. Vedere Concedere privilegi ai ruoli Postgres con PostgreSQL.

Passaggi successivi

Dopo aver ottenuto una credenziale (token OAuth o password), è possibile connettersi all'istanza del database: