Important
Lakebase 自動スケールは、ベータで、eastus2、westeurope、westusの各リージョンで利用可能です。
Lakebase 自動スケーリングは、自動スケール コンピューティング、ゼロへのスケーリング、分岐、インスタント リストアを備えた最新バージョンの Lakebase です。 Lakebase Provisioned との機能の比較については、バージョンの選択を参照してください。
Lakebase Postgres へのデータベース接続を認証する方法について説明します。 詳細な接続手順については、「 クイック スタート」を参照してください。
概要
Lakebase では、それぞれ異なるユース ケース向けに設計された 2 つの認証方法がサポートされています。
OAuth トークン認証: 時間制限付き OAuth トークンで Azure Databricks ID を使用します。 次の場合に最適です。
- トークンを更新できる対話型セッション
- ワークスペース統合ワークフロー
- トークンローテーションを実装できるアプリケーション
- Azure Databricks で認証を管理する場合
ネイティブ Postgres パスワード認証: 従来の Postgres ロールとパスワードを使用します。 次の場合に最適です。
- 資格情報を 1 時間ごとに更新できないアプリケーション
- 実行時間の長い処理
- トークンのローテーションをサポートしていないツール
注
プラットフォーム管理とデータベース アクセス: このページでは、データベース認証 (データベースに接続するための OAuth トークンと Postgres パスワード) に重点を置いています。 プラットフォーム管理認証 (プロジェクト、ブランチ、コンピューティングの作成) については、「プロジェクトの アクセス許可」を参照してください。
接続のタイムアウト
すべてのデータベース接続には、認証方法に関係なく、次の制限が適用されます。
- 24 時間アイドル タイムアウト: 24 時間アクティビティのない接続は自動的に閉じられます。
- 3日間の最大接続寿命: 3 日以上有効な接続は、アクティビティに関係なく閉じられる場合があります。
適切なタイムアウト設定で接続再試行ロジックを実装することで、接続タイムアウトを適切に処理するようにアプリケーションを設計します。
OAuth トークン認証
OAuth トークン認証を使用すると、Azure Databricks ID を使用して接続できます。 時間制限付きの OAuth トークンを Lakebase UI から生成し、Postgres に接続するときにパスワードとして使用します。
プロジェクト所有者の OAuth ロールが自動的に作成されます。 他の Azure Databricks ID に対して OAuth 認証を有効にするには、 databricks_auth 拡張機能と SQL を使用して Postgres ロールを作成する必要があります。
SQL を使用した DB ID の OAuth ロールの作成を参照してください。
OAuth トークンのしくみ
- トークンの有効期間: OAuth トークンは 1 時間後に期限切れになります。
- 有効期限の適用: トークンの有効期限はログイン時にのみ適用されます。 トークンの有効期限が切れた後も、開いている接続はアクティブなままです。
- 再認証: トークンの有効期限が切れている場合、Postgres のクエリまたはコマンドは失敗します。
- トークンの更新: 対話型セッションの場合は、必要に応じ UI から新しいトークンを生成します。 実行時間の長い接続を使用するアプリケーションの場合は、 トークンローテーション を実装して資格情報を自動的に更新します。
要件と制限
-
対応する Postgres ロールが必要です。Azure Databricks ID には、対応する Postgres ロールが必要です。 プロジェクト所有者のロールが自動的に作成されます。 他の Azure Databricks ID の場合は、
databricks_auth拡張機能を使用してロールを作成します。 - ワークスペース スコープ: OAuth トークンはワークスペース スコープであり、プロジェクトを所有するのと同じワークスペースに属している必要があります。 ワークスペース間トークン認証はサポートされていません。
-
SSL が必要: トークンベースの認証には SSL 接続が必要です。 すべてのクライアントは、SSL (通常は
sslmode=require) を使用するように構成する必要があります。
ユーザーからマシンへのフローで OAuth トークンを取得する
データベース所有者、管理者、または Azure Databricks ID にデータベースに対応する Postgres ロールがある場合は、UI、Databricks API、CLI、またはいずれかの Databricks SDK から OAuth トークンを取得できます。
他の Azure Databricks ID ユーザーについては、OAuth トークンを取得するためのワークスペース レベルの承認手順については、「 OAuth を使用して Azure Databricks へのユーザー アクセスを承認 する」を参照してください。
UI
psql や DBeaver などの SQL クライアントを使用する場合は、Lakebase UI を使用してトークンを生成します。
- Lakebase アプリでプロジェクトに移動します。
- 接続先のブランチとコンピューティングを選択します。
- [ 接続 ] をクリックし、指示に従って OAuth トークンを生成します。
詳細な手順については、 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
応答:
{
"token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
"expire_time": "2026-01-22T17:07:00Z"
}
データベースに接続するときに、 token 値をパスワードとして使用します。
Python SDK
Databricks SDK for Python を使用して OAuth トークンを生成できます。
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
Databricks SDK for Java を使用して OAuth トークンを生成できます。
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());
マシン間フローで OAuth トークンを取得する
データベースへの安全で自動化された (マシン間) アクセスを有効にするには、Azure Databricks サービス プリンシパルを使用して OAuth トークンを取得する必要があります。 このプロセスには、サービス プリンシパルの構成、資格情報の生成、認証用の OAuth トークンの作成が含まれます。
無期限に有効な資格情報を使用してサービス プリンシパルを構成します。 手順については、「 OAuth を使用して Azure Databricks へのサービス プリンシパル アクセスを承認する」を参照してください。
サービス プリンシパルとして新しい 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応答:
{ "token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...", "expire_time": "2026-01-22T17:07:00Z" }データベースに接続するときに、
token値をパスワードとして使用します。Python SDK
Databricks SDK for Python を使用して OAuth トークンを生成できます。
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
Databricks SDK for Java を使用して OAuth トークンを生成できます。
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());
注
時間単位の有効期限が切れる前に OAuth トークンをローテーションする:
- 使用のたびに OAuth トークンの有効期限を確認し、必要に応じて更新します。
- または、現在の OAuth トークンを定期的に更新するようにバックグラウンド スレッドを設定します。
トークンローテーションの例
OAuth トークンは 1 時間後に期限切れになるため、実行時間の長いデータベース接続を維持するアプリケーションでは、資格情報を定期的に更新するためにトークンローテーションを実装する必要があります。 次の例では、アプリケーション コードでトークンを自動的にローテーションする方法を示します。
注
これらの例の要件:
- プロジェクトを所有するワークスペースに対して認証する必要があります。
WorkspaceClient()は、ワークスペースの OAuth 資格情報を使用してデータベース トークンを生成します。 - Azure Databricks ID は、プロジェクトが作成されたワークスペースのメンバーである必要があります。
- Lakebase アプリの [接続 ] ダイアログから接続パラメーター (ホスト、データベース、エンドポイント) を取得します。 詳細については、 クイック スタート を参照してください。
-
endpointパラメーターは、次の形式を使用します。projects/{project-id}/branches/{branch-id}/endpoints/{endpoint-id}
ワークスペース認証のセットアップについては、「OAuth を使用して Azure Databricks へのユーザー アクセスを承認する」または「OAuth を使用して Azure Databricks へのサービス プリンシパル アクセスを承認する」を参照してください。
Python: psycopg3
この例では、psycopg3 の接続プールと、新しい接続が作成されるたびに新しい OAuth トークンを生成するカスタム接続クラスを使用します。 この方法により、プールからの各接続に有効な現在のトークンが常に含まれるようにします。
%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
この例では、15 分ごとに OAuth トークンを自動的に更新するイベント リスナーで SQLAlchemy の接続プールを使用します。 イベント リスナーは、プールから新しい接続が作成される前にトークンの有効期間を確認し、手動による介入なしでアプリケーションに常に有効なトークンがあることを確認します。
%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 パスワード認証
ネイティブ Postgres パスワード認証では、従来の Postgres ロールとパスワードが使用されます。 OAuth トークンとは異なり、これらのパスワードは 1 時間後に有効期限が切れるので、頻繁な資格情報のローテーションを処理できないアプリケーションに適しています。
Postgres パスワードを使用するタイミング
Postgres パスワード認証は、次の場合に使用します。
- アプリケーションまたはツールで資格情報を 1 時間ごとに更新することはできません
- 安定した資格情報を必要とする実行時間の長いプロセスがある
- クライアント ライブラリで OAuth トークンのローテーションがサポートされていない
- 互換性のために従来のデータベース認証が必要です
Postgres パスワードのしくみ
- パスワードの有効期間: パスワードは自動的に期限切れになりません
- ワークスペース統合なし: 認証は Azure Databricks ワークスペース認証ではなく Postgres によって処理されます
- 手動管理: パスワードを手動でローテーションし、ユーザーに配布する必要があります
- 接続タイムアウトは引き続き適用されます。パスワードの有効期限が切れない場合でも、接続には 24 時間のアイドル タイムアウトと 7 日間の最大接続時間が適用されます
セキュリティに関する考慮事項
- パスワード ストレージ: 環境変数またはシークレット管理システムを使用してパスワードを安全に格納する
-
SSL が必要: すべての接続で SSL (
sslmode=require) を使用する必要があります