Sdílet prostřednictvím


Informace o ověřování

Důležité

Automatické škálování LakeBase je v beta verzích v následujících oblastech: eastus2, westeurope, westus.

Automatické škálování LakeBase je nejnovější verze LakeBase s automatickým škálováním výpočetních prostředků, škálováním na nulu, větvení a okamžitým obnovením. Porovnání funkcí se službou Lakebase Provisioned najdete v tématu Volba mezi verzemi.

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ů
  • Kdy 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í správy platforem (vytváření projektů, větví, výpočetních prostředků) najdete v tématu Oprávnění projectu.

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řipojení pomocí identity Azure Databricks. Vygenerujete časově omezený token OAuth z uživatelského rozhraní Lakebase a použijete ho jako heslo při připojování k Postgresu.

Role OAuth vlastníka projektu se vytvoří automaticky. Pokud chcete povolit ověřování OAuth pro jiné identity Azure Databricks, musíte pomocí rozšíření a SQL vytvořit jejich role databricks_auth Postgres. 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.
  • Opětovné ověřování: Jakýkoli dotaz nebo příkaz Postgres selže, pokud vypršela platnost tokenu.
  • Aktualizace tokenu: V případě interaktivních relací vygenerujte v případě potřeby nový token z uživatelského rozhraní. 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í

  • Vyžaduje se 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. V případě 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).

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

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

Další uživatelé identit Azure Databricks, podívejte se na Autorizace přístupu uživatelů k Azure Databricks pomocí OAuth pro pokyny k autorizaci na úrovni pracovního prostoru, abyste získali tokeny 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

OAuth token můžete vygenerovat pomocí 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 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

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

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-počítač) k databázi, musíte získat token OAuth pomocí instančního objektu 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 Autorizace přístupu instančního objektu k Azure Databricks pomocí 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

    OAuth token můžete vygenerovat pomocí 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 Javu.

    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 identita Azure Databricks 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 Autorizace přístupu uživatelů k Azure Databricks pomocí OAuth nebo autorizace 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):
    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

Tento příklad používá fond připojení SQLAlchemy s posluchačem událostí, který automaticky aktualizuje token OAuth každých 15 minut. Posluchač událostí zkontroluje stáří tokenu před vytvořením každého nového připojení z fondu připojení a zajišťuje, že vaše aplikace bude mít vždy platný token bez ručního zásahu.

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

Ověřování hesla Postgres

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í zpracovává Postgres, ne ověřování pracovního 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 7denní 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).

Další kroky