Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Lakebase Autoscaling ist in Beta in den folgenden Regionen: eastus2, westeurope, westus.
Lakebase Autoscaling ist die neueste Version von Lakebase mit automatischer Berechnung, Skalierung bis Null, Verzweigung und sofortiger Wiederherstellung. Einen Featurevergleich mit Lakebase Provisioned finden Sie unter Auswahl zwischen Versionen.
Erfahren Sie, wie Sie Datenbankverbindungen mit Lakebase Postgres authentifizieren. Schrittweise Verbindungsanweisungen finden Sie in der Schnellstartanleitung.
Überblick
Lakebase unterstützt zwei Authentifizierungsmethoden, die jeweils für unterschiedliche Anwendungsfälle entwickelt wurden:
OAuth-Tokenauthentifizierung: Verwendet Azure Databricks-Identitäten mit zeitlich begrenzten OAuth-Token. Am besten geeignet für:
- Interaktive Sitzungen, in denen Sie Token aktualisieren können
- Arbeitsbereich-integrierte Workflows
- Anwendungen, die tokenrotation implementieren können
- Wenn Sie die Authentifizierung von Azure Databricks verwalten möchten
Native Postgres-Kennwortauthentifizierung: Verwendet traditionelle Postgres-Rollen mit Kennwörtern. Am besten geeignet für:
- Anwendungen, die Anmeldeinformationen nicht stündlich aktualisieren können
- Lange laufende Prozesse
- Tools, die die Tokenrotation nicht unterstützen
Hinweis
Plattformverwaltung im Vergleich zum Datenbankzugriff: Diese Seite konzentriert sich auf die Datenbankauthentifizierung (OAuth-Token und Postgres-Kennwörter für die Verbindung mit Ihrer Datenbank). Informationen zur Authentifizierung für die Plattformverwaltung (Erstellen von Projekten, Branches, Rechenressourcen) finden Sie unter Projektberechtigungen.
Verbindungstimeouts
Alle Datenbankverbindungen unterliegen den folgenden Grenzwerten, unabhängig von der Authentifizierungsmethode:
- 24-Stunden-Leerlauf-Timeout: Verbindungen, die 24 Stunden lang keine Aktivität aufweisen, werden automatisch geschlossen.
- Maximale Lebensdauer von 3 Tagen: Verbindungen, die seit mehr als 3 Tagen aktiv sind, können unabhängig von der Aktivität geschlossen werden.
Entwerfen Sie Ihre Anwendungen so, dass Verbindungstimeouts ordnungsgemäß verarbeitet werden, indem Sie die Verbindungs-Wiederholungslogik mit den entsprechenden Timeouteinstellungen implementieren.
OAuth-Tokenauthentifizierung
Mit der OAuth-Tokenauthentifizierung können Sie eine Verbindung mit Ihrer Azure Databricks-Identität herstellen. Sie generieren ein zeitlich begrenztes OAuth-Token aus der Lakebase-Benutzeroberfläche und verwenden es als Kennwort, wenn Sie eine Verbindung mit Postgres herstellen.
Die OAuth-Rolle des Projektbesitzers wird automatisch erstellt. Um die OAuth-Authentifizierung für andere Azure Databricks-Identitäten zu aktivieren, müssen Sie ihre Postgres-Rollen mit der databricks_auth Erweiterung und SQL erstellen. Siehe Erstellen einer OAuth-Rolle für eine DB-Identität mit SQL.
Funktionsweise von OAuth-Token
- Tokenlebensdauer: OAuth-Token laufen nach einer Stunde ab.
- Ablauferzwingung: Der Ablauf des Tokens wird nur bei der Anmeldung erzwungen. Offene Verbindungen bleiben auch nach Ablauf des Tokens aktiv.
- Erneute Authentifizierung: Jede Postgres-Abfrage oder -Befehle schlägt fehl, wenn das Token abgelaufen ist.
- Tokenaktualisierung: Generieren Sie bei interaktiven Sitzungen bei Bedarf ein neues Token aus der Benutzeroberfläche. Implementieren Sie für Anwendungen mit langen Verbindungen die Tokenrotation , um Anmeldeinformationen automatisch zu aktualisieren.
Anforderungen und Einschränkungen
-
Entsprechende Postgres-Rolle erforderlich: Ihre Azure Databricks-Identität muss über eine entsprechende Postgres-Rolle verfügen. Die Rolle des Projektbesitzers wird automatisch erstellt. Erstellen Sie für andere Azure Databricks-Identitäten ihre Rollen mithilfe der
databricks_authErweiterung. - Arbeitsbereichsabgrenzung: OAuth-Token sind arbeitsbereichsbezogen und müssen demselben Arbeitsbereich angehören, der das Projekt besitzt. Die arbeitsbereichübergreifende Tokenauthentifizierung wird nicht unterstützt.
-
SSL erforderlich: Die tokenbasierte Authentifizierung erfordert SSL-Verbindungen. Alle Clients müssen für die Verwendung von SSL konfiguriert werden (in der Regel
sslmode=require).
Abrufen eines OAuth-Tokens in einem Benutzer-zu-Computer-Fluss
Wenn Sie der Besitzer einer Datenbank, ein Administrator sind oder Ihre Azure Databricks-Identität eine entsprechende Postgres-Rolle für die Datenbank hat, können Sie ein OAuth-Token von der Benutzeroberfläche, der Databricks-API, der CLI oder einem der Databricks SDKs abrufen.
Weitere Azure Databricks-Identitätsbenutzer finden Sie unter Autorisieren des Benutzerzugriffs auf Azure Databricks mit OAuth für die Autorisierungsanweisungen auf Arbeitsbereichsebene, um OAuth-Token abzurufen.
Benutzeroberfläche
Verwenden Sie bei Verwendung von SQL-Clients wie psql oder DBeaver die Lakebase-Benutzeroberfläche, um Token zu generieren:
- Navigieren Sie in der Lakebase-App zu Ihrem Projekt.
- Wählen Sie den Zweig und den Rechner aus, mit dem Sie eine Verbindung herstellen möchten.
- Klicken Sie auf "Verbinden" , und folgen Sie den Anweisungen, um ein OAuth-Token zu generieren.
Eine vollständige Anleitung finden Sie unter Herstellen einer Verbindung mit einer OAuth-Rolle .
Befehlszeilenschnittstelle (CLI)
# Generate OAuth token for database connection (1-hour expiration)
databricks postgres generate-database-credential projects/my-project/branches/production/endpoints/my-compute --output json
Antwort:
{
"token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
"expire_time": "2026-01-22T17:07:00Z"
}
Verwenden Sie den token Wert als Kennwort, wenn Sie eine Verbindung mit Ihrer Datenbank herstellen.
Python SDK
Sie können ein OAuth-Token mithilfe des Databricks SDK für Python generieren.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# Generate OAuth token for database connection (1-hour expiration)
credential = w.postgres.generate_database_credential(
endpoint="projects/my-project/branches/production/endpoints/my-compute"
)
print(f"Token: {credential.token}")
print(f"Expires: {credential.expire_time}")
# Use the token to connect to Postgres
import psycopg2
conn = psycopg2.connect(
host="ep-example.database.region.databricks.com",
port=5432,
database="postgres",
user="your.email@company.com",
password=credential.token,
sslmode="require"
)
Java-SDK
Sie können ein OAuth-Token mithilfe des Databricks SDK für Java generieren.
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
WorkspaceClient w = new WorkspaceClient();
// Generate OAuth token for database connection (1-hour expiration)
DatabaseCredential credential = w.postgres().generateDatabaseCredential(
new GenerateDatabaseCredentialRequest()
.setEndpoint("projects/my-project/branches/production/endpoints/my-compute")
);
System.out.println("Token: " + credential.getToken());
System.out.println("Expires: " + credential.getExpireTime());
Abrufen eines OAuth-Tokens in einem Flow zwischen Computern
Um den sicheren, automatisierten Zugriff (Machine-to-Machine) auf die Datenbank zu ermöglichen, müssen Sie ein OAuth-Token mit einem Azure Databricks-Dienstprinzipal abrufen. Dieser Prozess umfasst das Konfigurieren des Dienstprinzipals, das Generieren von Anmeldeinformationen und das Abfassen von OAuth-Token für die Authentifizierung.
Konfigurieren Sie einen Dienstprinzipal mit unbefristet gültigen Anmeldeinformationen. Anweisungen finden Sie unter Autorisieren des Dienstprinzipalzugriffs auf Azure Databricks mit OAuth.
Generieren Sie neue OAuth-Token als Dienstprinzipal.
Befehlszeilenschnittstelle (CLI)
# Generate OAuth token for database connection (1-hour expiration) databricks postgres generate-database-credential projects/my-project/branches/production/endpoints/my-compute --output jsonAntwort:
{ "token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...", "expire_time": "2026-01-22T17:07:00Z" }Verwenden Sie den
tokenWert als Kennwort, wenn Sie eine Verbindung mit Ihrer Datenbank herstellen.Python SDK
Sie können ein OAuth-Token mithilfe des Databricks SDK für Python generieren.
from databricks.sdk import WorkspaceClient w = WorkspaceClient( host="https://<YOUR WORKSPACE URL>/", client_id="<YOUR SERVICE PRINCIPAL ID>", client_secret="REDACTED" ) # Generate OAuth token for database connection (1-hour expiration) credential = w.postgres.generate_database_credential( endpoint="projects/my-project/branches/production/endpoints/my-compute" ) print(f"Token: {credential.token}") print(f"Expires: {credential.expire_time}")Java-SDK
Sie können ein OAuth-Token mithilfe des Databricks SDK für Java generieren.
import com.databricks.sdk.WorkspaceClient; import com.databricks.sdk.core.DatabricksConfig; import com.databricks.sdk.service.postgres.*; // Initialize with service principal credentials DatabricksConfig config = new DatabricksConfig() .setHost("https://<YOUR WORKSPACE URL>/") .setClientId("<YOUR SERVICE PRINCIPAL ID>") .setClientSecret("REDACTED"); WorkspaceClient w = new WorkspaceClient(config); // Generate OAuth token for database connection (1-hour expiration) DatabaseCredential credential = w.postgres().generateDatabaseCredential( new GenerateDatabaseCredentialRequest() .setEndpoint("projects/my-project/branches/production/endpoints/my-compute") ); System.out.println("Token: " + credential.getToken()); System.out.println("Expires: " + credential.getExpireTime());
Hinweis
Rotieren Sie OAuth-Token vor dem stündlichem Ablauf:
- Überprüfen Sie bei Bedarf die Ablaufzeit des OAuth-Tokens für jede Verwendung und Aktualisierung.
- Alternativ können Sie einen Hintergrundthread einrichten, um das aktuelle OAuth-Token regelmäßig zu aktualisieren.
Beispiele für die Token-Rotation
Da OAuth-Tokens nach einer Stunde ablaufen, müssen Anwendungen, die lang andauernde Datenbankverbindungen verwalten, die Token-Rotation implementieren, um Anmeldeinformationen regelmäßig aktualisieren. Die folgenden Beispiele veranschaulichen, wie Token in Ihrem Anwendungscode automatisch gedreht werden.
Hinweis
Anforderungen für diese Beispiele:
- Sie müssen sich im Arbeitsbereich authentifizieren, der das Projekt besitzt. Der
WorkspaceClient()verwendet Ihre OAuth-Anmeldeinformationen des Arbeitsbereichs, um Datenbanktoken zu generieren. - Ihre Azure Databricks-Identität muss Mitglied des Arbeitsbereichs sein, in dem das Projekt erstellt wurde.
- Rufen Sie Ihre Verbindungsparameter (Host, Datenbank, Endpunkt) aus dem Dialogfeld "Verbinden " in der Lakebase-App ab. Details finden Sie in der Schnellstartanleitung .
- Der
endpointParameter verwendet das Format:projects/{project-id}/branches/{branch-id}/endpoints/{endpoint-id}
Informationen zum Einrichten der Arbeitsbereichsauthentifizierung finden Sie unter Autorisieren des Benutzerzugriffs auf Azure Databricks mit OAuth oder Autorisieren des Dienstprinzipalzugriffs auf Azure Databricks mit OAuth.
Python: psycopg3
In diesem Beispiel wird der Verbindungspool von psycopg3 mit einer benutzerdefinierten Verbindungsklasse verwendet, die jedes Mal, wenn eine neue Verbindung erstellt wird, ein neues OAuth-Token generiert. Durch diesen Ansatz wird sichergestellt, dass jede Verbindung aus dem Pool immer über ein gültiges, aktuelles Token verfügt.
%pip install "psycopg[binary,pool]"
from databricks.sdk import WorkspaceClient
import psycopg
from psycopg_pool import ConnectionPool
w = WorkspaceClient()
class CustomConnection(psycopg.Connection):
global w
def __init__(self, *args, **kwargs):
# Call the parent class constructor
super().__init__(*args, **kwargs)
@classmethod
def connect(cls, conninfo='', **kwargs):
# Generate a fresh OAuth token for each connection
endpoint = "projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
credential = w.postgres.generate_database_credential(endpoint=endpoint)
kwargs['password'] = credential.token
# Call the superclass's connect method with updated kwargs
return super().connect(conninfo, **kwargs)
# Configure connection parameters (get these from the Connect dialog in the LakeBase App)
username = "your.email@company.com" # Your DB identity
host = "ep-example.database.region.databricks.com" # Your compute endpoint hostname
port = 5432
database = "databricks_postgres"
# Create connection pool with custom connection class
pool = ConnectionPool(
conninfo=f"dbname={database} user={username} host={host} sslmode=require",
connection_class=CustomConnection,
min_size=1,
max_size=10,
open=True
)
# Use the connection pool
with pool.connection() as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT version()")
for record in cursor:
print(record)
Python: SQLAlchemy
In diesem Beispiel wird der Verbindungspool von SQLAlchemy mit einem Ereignislistener verwendet, der das OAuth-Token alle 15 Minuten automatisch aktualisiert. Der Ereignislistener überprüft das Tokenalter, bevor jede neue Verbindung aus dem Pool erstellt wird, um sicherzustellen, dass Ihre Anwendung immer über ein gültiges Token verfügt, ohne dass ein manueller Eingriff erforderlich ist.
%pip install sqlalchemy==1.4 psycopg[binary]
from databricks.sdk import WorkspaceClient
import time
from sqlalchemy import create_engine, text, event
w = WorkspaceClient()
# Configure connection parameters (get these from the Connect dialog in the LakeBase App)
endpoint = "projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
username = "your.email@company.com" # Your DB identity
host = "ep-example.database.region.databricks.com" # Your compute endpoint hostname
port = 5432
database = "databricks_postgres"
# Create SQLAlchemy engine
connection_pool = create_engine(f"postgresql+psycopg2://{username}:@{host}:{port}/{database}?sslmode=require")
# Global variables for token management
postgres_password = None
last_password_refresh = time.time()
@event.listens_for(connection_pool, "do_connect")
def provide_token(dialect, conn_rec, cargs, cparams):
global postgres_password, last_password_refresh
# Refresh token if it's None or older than 15 minutes (900 seconds)
if postgres_password is None or time.time() - last_password_refresh > 900:
print("Refreshing PostgreSQL OAuth token")
credential = w.postgres.generate_database_credential(endpoint=endpoint)
postgres_password = credential.token
last_password_refresh = time.time()
cparams["password"] = postgres_password
# Use the connection pool
with connection_pool.connect() as conn:
result = conn.execute(text("SELECT version()"))
for row in result:
print(f"Connected to PostgreSQL database. Version: {row}")
Postgres-Kennwortauthentifizierung
Die native Postgres-Kennwortauthentifizierung verwendet traditionelle Postgres-Rollen mit Kennwörtern. Im Gegensatz zu OAuth-Token laufen diese Kennwörter nicht nach einer Stunde ab, sodass sie für Anwendungen geeignet sind, die einen häufigen Wechsel von Anmeldeinformationen nicht umgehen können.
Wann man Postgres-Kennwörter verwenden sollte
Verwenden Sie die Postgres-Kennwortauthentifizierung, wenn:
- Ihre Anwendung oder Ihr Tool kann anmeldeinformationen nicht jede Stunde aktualisieren.
- Sie haben langlaufende Prozesse, die stabile Anmeldeinformationen benötigen
- Ihre Clientbibliothek unterstützt keine OAuth-Tokenrotation
- Für die Kompatibilität benötigen Sie eine traditionelle Datenbankauthentifizierung.
Funktionsweise von Postgres-Kennwörtern
- Kennwortlebensdauer: Kennwörter laufen nicht automatisch ab
- Keine Arbeitsbereichsintegration: Die Authentifizierung wird von Postgres und nicht von Azure Databricks-Arbeitsbereichsauthentifizierung behandelt.
- Manuelle Verwaltung: Kennwörter müssen manuell gedreht und an Benutzer verteilt werden
- Verbindungstimeouts gelten weiterhin: Auch wenn Kennwörter nicht ablaufen, unterliegen Verbindungen weiterhin einem 24-Stunden-Leerlauf-Timeout und einer maximalen Verbindungsdauer von 7 Tagen.
Sicherheitsüberlegungen
- Kennwortspeicherung: Sicheres Speichern von Kennwörtern mithilfe von Umgebungsvariablen oder geheimen Verwaltungssystemen
-
SSL erforderlich: Alle Verbindungen müssen SSL verwenden (
sslmode=require)