Postgresロールを作成する
Lakebase オートスケールは次のリージョンで利用できます: us-east-1 、 us-east-2 、 us-west-2 、 ca-central-1 、 sa-east-1 、 eu-central-1 、 eu-west-1 、 eu-west-2 、 ap-south-1 、 ap-southeast-1 、 ap-southeast-2 。
Lakebase オートスケールは、オートスケール コンピュート、ゼロへのスケール、分岐、即時復元を備えた Lakebase の最新バージョンです。 Lakebase プロビジョニング ユーザーの場合は、 「Lakebase プロビジョニング」を参照してください。
プロジェクトを作成すると、Lakebase によってプロジェクト内にいくつかの Postgres ロールが作成されます。
- プロジェクト所有者の Databricks ID の Postgres ロール (例:
user@databricks.com)。これはデフォルトのdatabricks_postgresデータベースを所有します。 databricks_superuser管理者ロール
これらの両方のロールは、プロジェクトを初めて開いたときに、 [ロールとデータベース] タブに表示されます。
databricks_postgresデータベースが作成されるので、プロジェクトの作成後すぐに Lakebase に接続して試すことができます。
システム管理ロールもいくつか作成されます。これらは、管理、モニタリング、データ操作のためにDatabricksサービスによって使用される内部ロールです。
Postgres のロールは 、データベース アクセス (誰がデータをクエリできるか) を制御します。 プロジェクト権限 (インフラストラクチャを管理できるユーザー) については、 「プロジェクト権限」を参照してください。両方のセットアップに関するチュートリアルについては、 「チュートリアル: 新しいユーザーにプロジェクトとデータベースのアクセスを許可する」を参照してください。
事前作成されたロールとシステム ロールを参照してください。
Postgresロールを作成する
Lakebase は、データベース アクセス用に 2 種類の Postgres ロールをサポートしています。
- Databricks ID の OAuth ロール: Lakebase UI、SQL を使用した
databricks_auth拡張機能、または Python SDK と REST API を使用して作成します。Databricks ID (ユーザー、サービスプリンシパル、グループ) がOAuthウイルスを使用して接続できるようにします。 - ネイティブ Postgres パスワード ロール: Lakebase UI、SQL、または Python SDK と REST API を使用して作成します。パスワード認証では有効なロール名を使用します。
使用するロールの種類を選択するためのガイダンスについては、 「認証の概要」を参照してください。それぞれ異なるユースケース向けに設計されています。
Databricks ID 用の OAuth ロールを作成する
Databricks ID (ユーザー、サービスプリンシパル、またはグループ) がOAuthを使用して接続できるようにするには、Lakebase UI、 SQLを使用したdatabricks_auth拡張機能、またはREST APIを使用してOAuthロールを作成します。
OAuthローンを取得する詳細な手順については、 「ユーザーからマシンへのフローでOAuthローンを取得する」および「マシンからマシンへのフローでOAuthローンを取得する」を参照してください。
- UI
- SQL
- Python SDK
- curl
- [役割とデータベース] > [役割の追加] > OAuth タブで、データベース アクセスを許可するユーザー、サービスプリンシパル、またはグループを選択します。
- ロールを作成したら、適切なデータベース権限を付与します。方法を学ぶ:権限を管理する

前提条件:
- データベースに対する
CREATEおよびCREATE ROLE権限が必要です - 有効なOAuthでDatabricks IDとして認証される必要があります。
- ネイティブPostgres認証セッションではOAuthロールを作成できません
-
databricks_auth拡張機能を作成します。各 Postgres データベースには独自の拡張子が必要です。SQLCREATE EXTENSION IF NOT EXISTS databricks_auth; -
databricks_create_role関数を使用して、Databricks ID の Postgres ロールを作成します。SQLSELECT databricks_create_role('identity_name', 'identity_type');Databricks ユーザーの場合:
SQLSELECT databricks_create_role('myuser@databricks.com', 'USER');Databricksサービスプリンシパルの場合:
SQLSELECT databricks_create_role('8c01cfb1-62c9-4a09-88a8-e195f4b01b08', 'SERVICE_PRINCIPAL');Databricks グループの場合:
SQLSELECT databricks_create_role('My Group Name', 'GROUP');グループ名は大文字と小文字が区別され、Databricks ワークスペースに表示されるものと完全に一致する必要があります。グループの Postgres ロールを作成すると、そのDatabricksグループの直接的または間接的なメンバー (ユーザーまたはサービスプリンシパル) は、個別のOAuthアカウントを使用してグループ ロールとして Postgres に対して認証できます。 これにより、個々のユーザーの権限を管理する代わりに、Postgres のグループ レベルで権限を管理できるようになります。
-
新しく作成されたロールにデータベース権限を付与します。
databricks_create_role()関数は、 LOGIN権限のみを持つ Postgres ロールを作成します。ロールを作成した後、ユーザーがアクセスする必要がある特定のデータベース、スキーマ、またはテーブルに対して適切なデータベース権限とアクセス許可を付与する必要があります。方法を学ぶ:権限を管理する
identity_type USER 、 SERVICE_PRINCIPAL 、またはGROUPに設定します。postgres_role ID の電子メール アドレス、アプリケーション ID (UUID)、またはグループ表示名にそれぞれ設定します。 この値は Postgres ロール名となり、接続文字列とGRANTステートメントで使用されます。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Role, RoleRoleSpec
w = WorkspaceClient()
operation = w.postgres.create_role(
parent="projects/my-project/branches/production",
role=Role(
spec=RoleRoleSpec(
identity_type="USER",
postgres_role="user@example.com"
)
)
)
role = operation.wait()
print(f"Created role: {role.name}")
ロールを作成したら、適切なデータベース権限を付与します。方法を学ぶ:権限を管理する
identity_type USER 、 SERVICE_PRINCIPAL 、またはGROUPに設定します。postgres_role ID の電子メール アドレス、アプリケーション ID (UUID)、またはグループ表示名にそれぞれ設定します。 この値は Postgres ロール名となり、接続文字列とGRANTステートメントで使用されます。
curl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"spec": {
"identity_type": "USER",
"postgres_role": "user@example.com"
}
}' | jq
エンドポイントは長時間実行される操作を返します。doneがtrueになるまでポーリングし、その後の API 呼び出しではロールのnameフィールドを使用します。「長時間実行操作」を参照してください。
ロールを作成したら、適切なデータベース権限を付与します。方法を学ぶ:権限を管理する
グループベースの認証
Databricks グループの Postgres ロールを作成すると、グループベースの認証が有効になります。これにより、Databricks グループのどのメンバーもグループのロールを使用して Postgres に対して認証できるようになり、権限管理が簡素化されます。
仕組み:
- Databricks グループの Postgres ロールを作成します。
- Postgres のグループ ロールにデータベース権限を付与します。「権限の管理」を参照してください。
- Databricksグループの直接的または間接的なメンバー (ユーザーまたはサービスプリンパルシ) は、個別のOAuthセキュリティを使用して Postgres に接続できます。
- 接続すると、メンバーはグループ ロールとして認証され、そのロールに付与されたすべての権限を継承します。
認証フロー:
グループ メンバーが接続するときに、グループの Postgres ロール名をユーザー名として指定し、独自の OAuth トークンをパスワードとして指定します。
export PGPASSWORD='<OAuth token of a group member>'
export GROUP_ROLE_NAME='<pg-case-sensitive-group-role-name>'
psql -h $HOSTNAME -p 5432 -d databricks_postgres -U $GROUP_ROLE_NAME
重要な考慮事項:
- グループ メンバーシップの検証: グループ メンバーシップは認証時にのみ検証されます。接続を確立した後にメンバーが Databricks グループから削除された場合、接続はアクティブなままになります。削除されたメンバーからの新たな接続試行は拒否されます。
- ワークスペースのスコープ: プロジェクトと同じDatabricksワークスペースに割り当てられたグループのみが、グループベースの認証でサポートされます。 ワークスペースにグループを割り当てる方法については、 「グループの管理」を参照してください。
- 大文字と小文字の区別:
databricks_create_role()で使用されるグループ名は、大文字と小文字を含め、Databricks ワークスペースに表示されるグループ名と完全に一致する必要があります。 - 権限管理: Postgres では、グループ レベルで権限を管理する方が、個々のユーザー権限を管理するよりも効率的です。グループ ロールに権限を付与すると、現在のグループ メンバーと将来のグループ メンバー全員がその権限を自動的に継承します。
- ID の名前変更: Databricksでユーザーの電子メールまたはグループの表示名が変更されると、認証と既存のデータベース許可が壊れます。 古いロールを削除し、更新された名前で新しいロールを作成し、接続文字列と許可を更新します。
ロール名は 63 文字を超えることはできず、一部の名前は許可されません。詳細:役割の管理
ネイティブのPostgresパスワードロールを作成する
パスワード接続は、プロジェクトまたはコンピュート レベルで無効にすることができます。 「パスワード接続をブロックする」を参照してください。
- UI
- SQL
- Python SDK
- curl
- [ロールとデータベース] > [ロールの追加] > [パスワード] タブで、ロール名を入力し、オプションで
databricks_superuserまたはシステム属性 (CREATEDB、CREATEROLE、BYPASSRLS) を付与します。 - 生成されたパスワードをコピーし、ユーザーに安全に提供します。再度表示されません。

CREATE ROLE role_name WITH LOGIN PASSWORD 'your_secure_password';
パスワードは、小文字、大文字、数字、記号を組み合わせた 12 文字以上である必要があります。ユーザー定義のパスワードは、60 ビットのエントロピーを確保するために作成時に検証されます。
パスワード ロールを作成するには、 identity_typeを省略します。API は生成されたパスワードを応答で返します。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Role, RoleRoleSpec
w = WorkspaceClient()
operation = w.postgres.create_role(
parent="projects/my-project/branches/production",
role=Role(
spec=RoleRoleSpec(
postgres_role="my-app-role"
)
)
)
role = operation.wait()
print(f"Created role: {role.name}")
パスワード ロールを作成するには、 identity_typeを省略します。エンドポイントは長時間実行される操作を返します。doneがtrueになるまでポーリングします。
curl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"spec": {
"postgres_role": "my-app-role"
}
}' | jq
Postgres のロールを表示
- UI
- PostgreSQL
- Python SDK
- curl
プロジェクト内のすべての Postgres ロールを表示するには、Lakebase アプリでブランチの [ロールとデータベース] タブに移動します。システム ロールを除き、ブランチで作成されたすべてのロールが一覧表示されます。 「認証タイプ」 列は、各ロールが OAuth 認証を使用するか、パスワード認証を使用するかを示します。

\duコマンドですべてのロールを表示します:
任意の Postgres クライアント ( psqlなど) または Lakebase SQL エディターから\duメタコマンドを使用して、システム ロールを含むすべての Postgres ロールを表示できます。
\du
List of roles
Role name | Attributes
-----------------------------+------------------------------------------------------------
cloud_admin | Superuser, Create role, Create DB, Replication, Bypass RLS
my.user@databricks.com | Create role, Create DB, Bypass RLS
databricks_control_plane | Superuser
databricks_gateway |
databricks_monitor |
databricks_reader_12345 | Create role, Create DB, Replication, Bypass RLS
databricks_replicator | Replication
databricks_superuser | Create role, Create DB, Cannot login, Bypass RLS
databricks_writer_12345 | Create role, Create DB, Replication, Bypass RLS
すべてのロールを一覧表示します。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
roles = w.postgres.list_roles(parent="projects/my-project/branches/production")
for role in roles:
print(f"{role.status.postgres_role} ({role.status.identity_type or 'PASSWORD'}): {role.name}")
特定のロールを取得します。
role = w.postgres.get_role(
name="projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx"
)
print(role)
すべてのロールを一覧表示します。
curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
特定のロールを取得します。
curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
応答には、更新および削除の呼び出しに必要なnameフィールド (たとえば、 rol-xxxx-xxxxxxxxxx ) が含まれます。
役割を更新する
UI でロールの属性を更新するには、 「ロールとデータベース」 タブのロール メニューから 「ロールの編集」 を選択します。
API を使用して、ロールのシステム ロールまたは属性を更新します。変更するフィールドを指定するには、クエリ引数としてupdate_mask使用します。マスクされたフィールドのみが変更されます。
更新および削除の呼び出しで使用するロールのリソース名を取得するには、ロールのリストエンドポイントを使用します。ロール リソース名では、作成時に指定されたpostgres_role値ではなく、システムによって生成された識別子 (たとえば、 rol-xxxx-xxxxxxxxxx ) が使用されます。
curl -X PATCH "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx?update_mask=spec.membership_roles%2Cspec.attributes.createdb" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx",
"spec": {
"membership_roles": ["DATABRICKS_SUPERUSER"],
"attributes": { "createdb": true }
}
}' | jq
databricks_superuserを削除するには、空の配列"membership_roles": []を渡します。
Postgresロールを削除する
Databricks ID ベースのロールとネイティブの Postgres パスワード ロールの両方を削除できます。
- UI
- PostgreSQL
- Python SDK
- curl
ロールの削除は元に戻すことのできない永続的なアクションです。データベースを所有するロールを削除するには、所有するオブジェクトを再割り当てするロールを指定する必要があります。それ以外の場合は、データベースを所有するロールを削除する前に、データベースを手動で削除する必要があります。
UI を使用して Postgres ロールを削除するには:
- Lakebase アプリでブランチの [ロールとデータベース] タブに移動します。
- ロールメニューから 「ロールの削除」 を選択し、削除を確認します。
標準の Postgres コマンドを使用して、任意の Postgres ロールを削除できます。詳細については、ロールの削除に関する PostgreSQL のドキュメントを参照してください。
役割を削除します。
DROP ROLE role_name;
Databricks ID ベースのロールを削除すると、新しいロールが作成されるまで、その ID は OAuth トークンを使用して Postgres に対して認証できなくなります。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
operation = w.postgres.delete_role(
name="projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx"
)
operation.wait()
curl -X DELETE "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
事前に作成されたロール
プロジェクトが作成されると、Databricks はプロジェクト管理と開始のために Postgres ロールを自動的に作成します。
ロール | 説明 | 継承された権限 |
|---|---|---|
| プロジェクト作成者の Databricks ID (例: | メンバー |
| 内部管理の役割。プロジェクト全体のアクセスを構成および管理するために使用されます。このロールには広範な権限が付与されます。 |
|
これらのロールの特定の機能と権限の詳細については、以下を参照してください:事前に作成されたロールの機能
Databricksによって作成されたシステムロール
Databricks は、内部サービスに必要な次のシステム ロールを作成します。これらのロールは、 psqlまたはLakebase SQL エディターから\duコマンドを発行することで表示できます。
ロール | 目的 |
|---|---|
| クラウド インフラストラクチャ管理に使用されるスーパーユーザー ロール |
| 管理操作のために内部 Databricks コンポーネントによって使用されるスーパーユーザー ロール |
| 内部メトリクス収集サービスによって使用される |
| データベースのレプリケーション操作に使用される |
| 同期されたテーブルの作成と管理に使用されるデータベースごとのロール |
| Unity Catalogに登録されたテーブルを読み取るために使用されるデータベースごとのロール |
| マネージドデータ配信サービスの内部接続に使用されます |
Postgres でのロール、権限、およびロール メンバーシップの仕組みについては、Postgres ドキュメントの次のリソースを参照してください。