Autenticar em uma instância de banco de dados
Visualização
Esse recurso está em Public Preview nas seguintes regiões: us-east-1, us-west-2, eu-west-1, ap-southeast-1, ap-southeast-2, eu-central-1, us-east-2, ap-south-1.
Esta página descreve como se autenticar em uma instância do banco de dados Lakebase. Há duas maneiras de se autenticar:
- Obter tokens OAuth e autenticar usando identidades Databricks.
- Use funções nativas do Postgres com senhas.
Autenticar com as identidades da Databricks
Ao se autenticar como uma identidade Databricks, o senhor precisa gerar um token OAuth e usá-lo como senha ao se conectar ao Postgres.
Considerações antes de começar
-
Os tokens OAuth expiram após uma hora, mas a expiração é aplicada somente no login. As conexões abertas permanecem ativas mesmo que os tokens expirem. No entanto, qualquer comando PostgreSQL que exija autenticação falhará se os tokens tiverem expirado.
-
OAuth tokens usados para autenticação do Postgres são workspace-scoped e devem pertencer ao mesmo workspace que possui a instância do banco de dados. Não há suporte para autenticação de tokens entreworkspace. Para saber mais sobre autenticação, consulte Autenticação para a CLI da Databricks.
-
A autenticação baseada em tokens exige uma senha de texto simples, portanto, somente conexões SSL são permitidas. Certifique-se de que a biblioteca cliente que o senhor usa para acessar o Postgres com autenticação baseada em tokens esteja configurada para estabelecer uma conexão SSL.
Obter um OAuth tokens em um fluxo de usuário para máquina
Se o senhor for proprietário ou administrador do banco de dados ou se sua identidade Databricks tiver uma função Postgres correspondente para a instância do banco de dados, poderá obter um token OAuth na interface do usuário, no Databricks CLI ou em um dos SDKs Databricks. O senhor pode restringir o escopo dos tokens adequadamente usando o Databricks CLI.
Para outros usuários de identidade Databricks, consulte Autorizar o acesso do usuário a Databricks com OAuth para obter as instruções de autorização no nível workspacepara obter OAuth tokens.
- UI
- CLI
- Python SDK
- Java SDK
Quando o status da instância do banco de dados for Disponível , use a interface do usuário Databricks para obter um token OAuth:
- Na página de detalhes da instância do banco de dados , clique em Get OAuth tokens . Um sinalizador indica quando os tokens foram criados.
- Clique em Copy OAuthToken para copiar os tokens para a área de transferência. O senhor deve substituir esse valor nas cadeias de conexão fornecidas no próximo passo.
- Clique no ícone de cópia que segue as cadeias de conexão fornecidas.
Quando o status da instância do banco de dados for Disponível , use o Databricks CLI v0.256.0 e posterior para obter tokens OAuth:
-
Use o comando a seguir para buscar tokens.
Bashdatabricks database generate-database-credential \
--request-id $(uuidgen) \
--json '{
"instance_names": ["db-instance-name"]
}' -
Isso gera uma resposta no formato a seguir. Copie o
tokenda resposta.JSON{
"expiration_time": "2025-08-24T14:15:22Z",
"token": "<string>"
}
Para obter mais informações sobre o uso do Databricks CLI para obter tokens OAuth, consulte OAuth autenticação user-to-machine (U2M).
O senhor pode gerar um OAuth tokens usando o Databricks SDK para Python. As ligações do Databricks SDK estão disponíveis no Databricks SDK para Python versão v0.56.0.
Se o senhor estiver usando uma versão mais antiga do SDK, execute esses comandos primeiro.
%pip install --upgrade databricks-sdk
%restart_python
O SDK Databricks para Python gera tokens OAuth seguros, cred, para sua instância de banco de dados. Insira suas credenciais onde necessário.
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])
O senhor pode gerar um OAuth tokens usando o Databricks SDK para Java. As associações do banco de dados SDK estão disponíveis em Databricks SDK para Java versão v0.53.0 ou acima. Se o senhor estiver usando uma versão mais antiga do SDK, talvez seja necessário refresh o SDK importado. Para obter mais informações, consulte aqui.
%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())
Obter um OAuth tokens em um fluxo máquina a máquina
Para permitir o acesso seguro e automatizado (máquina a máquina) à instância do banco de dados, o senhor deve obter tokens OAuth usando uma entidade de serviço Databricks. Esse processo envolve a configuração da entidade de serviço, a geração de credenciais e a criação de tokens OAuth para autenticação.
- Configurar uma entidade de serviço com credenciais de duração indefinida. Para obter instruções, consulte Autorizar o acesso da entidade de serviço ao Databricks com OAuth.
- Mint new OAuth tokens como a entidade de serviço.
- CLI
- Python SDK
- Java SDK
Quando o status da instância do banco de dados for Disponível , use o Databricks CLI v0.256.0 e posterior para obter tokens OAuth:
-
Use o comando a seguir para buscar tokens.
Bashdatabricks database generate-database-credential \
--request-id $(uuidgen) \
--json '{
"instance_names": ["db-instance-name"]
}' -
Isso gera uma resposta no formato a seguir. Copie o
tokenda resposta.JSON{
"expiration_time": "2025-08-24T14:15:22Z",
"token": "<string>"
}
O senhor pode gerar um OAuth tokens usando o Databricks SDK para Python. As ligações do Databricks SDK estão disponíveis no Databricks SDK para Python versão v0.56.0.
Se o senhor estiver usando uma versão mais antiga do SDK, execute esses comandos primeiro.
%pip install --upgrade databricks-sdk
%restart_python
O Databricks SDK para Python gera tokens OAuth seguros, cred, para sua instância de banco de dados. Insira o nome da instância do banco de dados quando necessário.
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])
Você pode gerar tokens OAuth usando o Databricks SDK para Java. As vinculações do Database SDK estão disponíveis no Databricks SDK para Java versão v0.53.0 ou acima. Se você estiver executando uma versão mais antiga do SDK, talvez seja necessário atualizar para um SDK mais recente. Para mais informação, veja aqui.
%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())
Gire os tokens OAuth antes da expiração por hora:
- Verifique o tempo de expiração dos tokens OAuth em cada uso e refresh quando necessário.
- Como alternativa, configure um thread em segundo plano para refresh os tokens OAuth atuais periodicamente.
Solucionar problemas de identidade de tokens
Se a identidade dos seus tokens não corresponder ao rótulo de segurança, você poderá receber uma mensagem de erro como a seguinte.
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.
execute o seguinte comando para verificar qual identidade Databricks é retornada:
- CLI
- Python SDK
- Java SDK
databricks current-user me
w.current_user.me().user_name
w.currentUser.me().getUserName()
Se a identidade esperada não for retornada, verifique se as credenciais corretas foram usadas ao inicializar o cliente workspace .
Autenticar como grupo Databricks
Os grupos e as associações de grupos não são sincronizados do Databricks para o Postgres, nem as permissões do Unity Catalog. No entanto, depois que um grupo Databricks é adicionado ao Postgres, qualquer usuário Databricks do grupo pode log in como o grupo usando a senha do usuário. Isso permite que o senhor gerencie as permissões no nível do grupo no Postgres. Qualquer membro direto ou indireto (usuário ou entidade de serviço) da identidade do grupo Databricks pode se autenticar no Postgres e no log in como a função Postgres do grupo Databricks.
Ao autenticar como uma identidade de grupo usando tokens de usuário ou entidade de serviço, a associação ao grupo é validada somente no momento da autenticação. Qualquer conexão aberta com tokens de um membro do grupo permanece aberta se o membro for removido do grupo após a autenticação. Qualquer nova solicitação de conexão de um membro do grupo removido é rejeitada durante a autenticação.
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
Somente os grupos atribuídos a Databricks workspace da instância do banco de dados são compatíveis com o login do Postgres baseado em grupo. Para saber como atribuir um grupo a um workspace, consulte Atribuir um grupo a um workspace.
Autentique-se com funções e senhas do Postgres
Se você tiver clientes que não suportam rotação de credenciais após uma hora, você pode criar funções nativas do Postgres com senhas:
-
Clique em Computação na barra lateral do workspace.
-
Clique em Database instances (Instâncias de banco de dados ) tab.
-
Selecione a instância do banco de dados que você deseja atualizar.
-
Clique em Editar no canto superior direito.
-
Ative a opção Ativar login da função nativa do Postgres .
-
Clique em Salvar .
-
Faça login no Postgres ou use o SQL Editor para criar uma função com uma senha.
SQLCREATE ROLE new_role LOGIN PASSWORD 'your strong password'; -
Conceda permissões adicionais do Postgres para a nova função. Consulte conceder privilégios às funções do Postgres usando o PostgreSQL.
Next os passos
Depois de obter uma credencial (tokensOAuth ou senha), o senhor pode se conectar à instância do banco de dados: