Informace o ověřování

Zjistěte, jak ověřovat připojení databáze k Lakebase Postgres. Podrobné pokyny k připojení najdete v rychlém startu.

Přehled

Lakebase podporuje dvě metody ověřování, které jsou navržené pro různé případy použití:

ověřování tokenu OAuth: Používá identity Azure Databricks s časově omezenými tokeny OAuth. Nejvhodnější pro:

  • Interaktivní relace, ve kterých můžete aktualizovat tokeny
  • Pracovní postupy integrované do pracovního prostoru
  • Aplikace, které můžou implementovat obměnu tokenů
  • Pokud chcete ověřování spravovat pomocí Azure Databricks

Nativní ověřování hesla Postgres: Používá tradiční role Postgres s hesly. Nejvhodnější pro:

  • Aplikace, které nemůžou aktualizovat přihlašovací údaje každou hodinu
  • Dlouhotrvající procesy
  • Nástroje, které nepodporují obměnu tokenů

Poznámka:

Správa platforem vs. přístup k databázi: Tato stránka se zaměřuje na ověřování databáze (tokeny OAuth a hesla Postgres pro připojení k databázi). Informace o ověřování pro správu platforem (vytváření projektů, větví, výpočetní kapacity) najdete v tématu Oprávnění projektů.

Vypršení časových limitů připojení

Všechna připojení k databázi podléhají následujícím omezením bez ohledu na metodu ověřování:

  • Časový limit nečinnosti 24 hodin: Připojení bez aktivity po dobu 24 hodin se automaticky zavře.
  • 3denní maximální životnost připojení: Připojení, která byla naživu déle než 3 dny, mohou být uzavřena bez ohledu na aktivitu.

Navrhněte aplikace tak, aby správně zpracovávaly časové limity připojení implementací logiky opakování připojení s odpovídajícím nastavením časového limitu.

Ověřování tokenů OAuth

Ověřování pomocí tokenu OAuth umožňuje připojit se pomocí Azure Databricks identity. Při připojování k Postgresu vygenerujete časově omezený token OAuth a použijete ho jako heslo.

Role OAuth vlastníka projektu se vytvoří automaticky. Pokud chcete povolit ověřování OAuth pro jiné identity Azure Databricks, musíte vytvořit jejich role Postgres pomocí rozšíření databricks_auth a SQL. Viz Vytvoření role OAuth pro identitu databáze pomocí SQL.

Jak fungují tokeny OAuth

  • Životnost tokenu: Platnost tokenů OAuth vyprší po jedné hodině.
  • Vynucení vypršení platnosti: Vypršení platnosti tokenu se vynucuje pouze při přihlášení. Otevřená připojení zůstávají aktivní i po vypršení platnosti tokenu.
  • Aktualizace tokenu: V případě interaktivních relací vygenerujte v případě potřeby nový token. U aplikací s dlouhotrvajícími připojeními implementujte obměně tokenů pro automatickou aktualizaci přihlašovacích údajů.

Požadavky a omezení

  • Požadována je odpovídající role Postgres: Vaše identita Azure Databricks musí mít odpovídající roli Postgres. Role vlastníka projektu se vytvoří automaticky. U jiných identit Azure Databricks vytvořte jejich role pomocí rozšíření databricks_auth.
  • Rozsah pracovního prostoru: Tokeny OAuth jsou omezeny na pracovní prostor a musí být součástí stejného pracovního prostoru, který vlastní projekt. Ověřování tokenů mezi pracovními prostory se nepodporuje.
  • Vyžaduje se protokol SSL: Ověřování na základě tokenů vyžaduje připojení SSL. Všichni klienti musí být nakonfigurováni tak, aby používali sslmode=requireprotokol SSL (obvykle).
  • Poolování připojení se nepodporuje: Integrovaný nástroj pro poolování připojení PgBouncer nepodporuje autentizaci OAuth. Pro připojení ve sdíleném fondu používejte nativní role hesel v Postgres. Viz Použití sdružování připojení.

Získání tokenu OAuth v toku user-to-machine

Pokud jste vlastníkem databáze, správcem nebo pokud vaše Azure Databricks identita má odpovídající roli Postgres pro databázi, můžete získat token OAuth prostřednictvím uživatelského rozhraní, Databricks API, CLI nebo některé ze sad SDK Databricks.

Pro další uživatele identity Azure Databricks si přečtěte Authorizace přístupu uživatelů k Azure Databricks pomocí OAuth, kde najdete pokyny k autorizaci na úrovni pracovního prostoru pro získání tokenů OAuth.

uživatelské rozhraní

Pokud používáte klienty SQL, jako je psql nebo DBeaver, vygenerujte tokeny pomocí uživatelského rozhraní Lakebase:

  1. Přejděte k projektu v aplikaci Lakebase.
  2. Vyberte větev a výpočetní prostředky, ke které se chcete připojit.
  3. Klikněte na Připojit a podle pokynů vygenerujte token OAuth.

Úplné pokyny najdete v tématu Připojení s rolí OAuth .

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

Odpověď:

{
  "token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
  "expire_time": "2026-01-22T17:07:00Z"
}

token Při připojování k databázi použijte hodnotu jako heslo.

Python SDK

Token OAuth můžete vygenerovat pomocí sady Databricks SDK pro Python.

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 psycopg

conn = psycopg.connect(
    host="ep-example.database.region.databricks.com",
    port=5432,
    dbname="databricks_postgres",
    user="your.email@company.com",
    password=credential.token,
    sslmode="require"
)

Java SDK

Token OAuth můžete vygenerovat pomocí sady Databricks SDK pro Java.

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

Získání tokenu OAuth v toku počítače do počítače

Pokud chcete povolit zabezpečený automatizovaný přístup (stroj-stroj) k databázi, musíte získat token OAuth pomocí hlavního objektu služby Azure Databricks. Tento proces zahrnuje konfiguraci instančního objektu, generování přihlašovacích údajů a vytváření tokenů OAuth pro ověřování.

  1. Nakonfigurujte instanční objekt s neomezenou životností přihlašovacích údajů. Pokyny najdete v tématu Autorizování přístupu služebního principálu k Azure Databricks s využitím OAuth.
  2. Vytvořte nové OAuth tokeny jako hlavní službu.

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

Odpověď:

{
  "token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
  "expire_time": "2026-01-22T17:07:00Z"
}

token Při připojování k databázi použijte hodnotu jako heslo.

Python SDK

Token OAuth můžete vygenerovat pomocí sady Databricks SDK pro Python.

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

Token OAuth můžete vygenerovat pomocí sady Databricks SDK pro Java.

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

Poznámka:

Obměňte tokeny OAuth před hodinovým vypršením.

  • Zkontrolujte čas vypršení platnosti tokenu OAuth při každém použití a v případě potřeby aktualizujte.
  • Případně můžete nastavit vlákno na pozadí pro pravidelné aktualizace aktuálního tokenu OAuth.

Příklady obměně tokenů

Vzhledem k tomu, že platnost tokenů OAuth vyprší po jedné hodině, musí aplikace, které udržují dlouhotrvající databázová připojení, implementovat obměnu tokenů, aby se přihlašovací údaje pravidelně aktualizovaly. Následující příklady ukazují, jak automaticky otáčet tokeny v kódu aplikace.

Poznámka:

Požadavky pro tyto příklady:

  • Musíte být přihlášeni do pracovního prostoru, který vlastní projekt. Přihlašovací údaje pracovního prostoru OAuth se používají k vygenerování tokenů databáze WorkspaceClient().
  • Vaše Azure Databricks identita musí být členem pracovního prostoru, ve kterém byl projekt vytvořen.
  • Z dialogového okna Připojit v aplikaci Lakebase získejte parametry připojení (hostitel, databáze, koncový bod). Podrobnosti najdete v rychlém startu .
  • Parametr endpoint používá formát: projects/{project-id}/branches/{branch-id}/endpoints/{endpoint-id}

Nastavení ověřování pracovního prostoru najdete v tématu Authorizace přístupu uživatelů k Azure Databricks pomocí OAuth nebo Authorize přístupu instančního objektu k Azure Databricks pomocí OAuth.

Python: psycopg3

Tento příklad používá fond připojení psycopg3 s vlastní třídou připojení, která při každém vytvoření nového připojení vygeneruje nový token OAuth. Tento přístup zajišťuje, že každé připojení z fondu má vždy platný aktuální token.

%pip install "psycopg[binary,pool]"
from databricks.sdk import WorkspaceClient

import psycopg
from psycopg_pool import ConnectionPool

w = WorkspaceClient()

class CustomConnection(psycopg.Connection):
    @classmethod
    def connect(cls, conninfo='', **kwargs):
        # Generate a fresh OAuth token for each new connection
        endpoint = "projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
        credential = w.postgres.generate_database_credential(endpoint=endpoint)
        kwargs['password'] = credential.token
        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

Tento příklad používá fond připojení SQLAlchemy s posluchačem událostí, který automaticky aktualizuje token OAuth před vypršením jeho platnosti. Posluchač událostí se spouští před vytvořením každého nového síťového připojení z fondu a aktualizuje token, pokud je do 2 minut od vypršení platnosti, aby vaše aplikace vždy měla platný token bez nutnosti ručního zásahu.

%pip install sqlalchemy==2.0.36 "psycopg[binary]==3.2.3" databricks-sdk==0.79.0
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+psycopg://{username}:@{host}:{port}/{database}?sslmode=require")

# Global variables for token management
postgres_password = None
token_expiry = 0.0  # Unix timestamp when the current token expires

@event.listens_for(connection_pool, "do_connect")
def provide_token(dialect, conn_rec, cargs, cparams):
    global postgres_password, token_expiry

    # Refresh token if None or expiring within 2 minutes
    if postgres_password is None or time.time() >= token_expiry - 120:
        print("Refreshing PostgreSQL OAuth token")
        credential = w.postgres.generate_database_credential(endpoint=endpoint)
        postgres_password = credential.token
        token_expiry = credential.expire_time.seconds

    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}")

Ověřování hesla Postgres

Poznámka:

Pro nové projekty automatického škálování Lakebase jsou ve výchozím nastavení zakázaná připojení hesel. Pokud je chcete povolit, přečtěte si téma Správa připojení hesel.

Nativní ověřování hesel Postgres používá tradiční role Postgres s hesly. Na rozdíl od OAuth tokenů tyto hesla nevyprší po jedné hodině, takže jsou vhodná pro aplikace, které nedokážou často měnit přihlašovací údaje.

Kdy použít hesla Postgres

Ověřování hesla Postgres použijte v případech:

  • Vaše aplikace nebo nástroj nemůže aktualizovat přihlašovací údaje každou hodinu
  • Máte dlouhotrvající procesy, které potřebují stabilní přihlašovací údaje.
  • Vaše klientská knihovna nepodporuje obměnu tokenů OAuth.
  • K zajištění kompatibility potřebujete tradiční ověřování databáze.

Jak fungují hesla Postgres

  • Životnost hesla: Platnost hesel nevyprší automaticky
  • Žádná integrace pracovního prostoru: Ověřování zajišťuje Postgres, nikoliv ověřování v pracovním prostoru Azure Databricks.
  • Ruční správa: Hesla musí být ručně otočena a distribuována uživatelům.
  • Stále platí vypršení časového limitu připojení: I když nevyprší platnost hesel, stále platí 24hodinový časový limit nečinnosti a 3denní maximální životnost připojení.

Bezpečnostní aspekty

  • Úložiště hesel: Bezpečné ukládání hesel pomocí proměnných prostředí nebo systémů pro správu tajných kódů
  • Vyžaduje se protokol SSL: Všechna připojení musí používat protokol SSL (sslmode=require).

Sdružování připojení

Nativní role hesel Postgres podporují integrovaný nástroj pro sdružování připojení PgBouncer. Pooler snižuje režijní náklady na připojení pro aplikace s vysokou propustností. Viz Použití sdružování připojení.

Další zdroje informací