権限を管理する
ベータ版
Lakebase Postgres (オートスケール Beta) は、 Lakebase の次のバージョンであり、評価のみに利用できます。 本番運用ワークロードの場合は、 Lakebase Public Previewを使用します。 どのバージョンが適しているかを判断するには、バージョンの選択を参照してください。
Lakebase データベース プロジェクトで Postgres ロールにデータベース権限を付与する方法を学習します。
前提条件: 権限を付与する前に、Postgres ロールを作成しておく必要があります。Lakebase UI を使用してネイティブの Postgres パスワード ロールを作成することも、 databricks_auth拡張機能を使用して Databricks ID の OAuth ロールを作成することもできます。「Postgres ロールの作成」を参照してください。
ベータ版でのプロジェクトレベルのアクセス
Lakebase オートスケール Beta は、データベース プロジェクトの ACL (アクセス コントロール リスト) をサポートしていません。 ワークスペースへのアクセス権を持つすべての Databricks ID は、Lakebase アプリ UI を通じてデータベース プロジェクトにアクセスし、管理できます。
ただし、Postgres 経由で接続するには (psql、JDBC などを使用)、ユーザーには次のものが必要です。
- 対応するPostgresロール
- そのロールに付与された明示的なデータベース権限
事前に作成されたロールとデフォルトの権限
データベース プロジェクトを作成すると、Lakebase によって、アクセス レベルの異なる複数の Postgres ロールが自動的に作成されます。これらのデフォルト ロールを理解すると、追加の権限を付与するタイミングを決定するのに役立ちます。
事前に作成されたロール:
| ロール | LOGIN | CREATEDB | CREATEROLE | 複製 | BYPASSRLS | 
|---|---|---|---|---|---|
| 
 | ✅ | ✅ | ✅ | ✅ | ✅ | 
| 
 | — | ✅ | ✅ | — | ✅ | 
デフォルトの権限:
- <project_owner_role>: プロジェクト作成者の Databricks ID (例:- user@databricks.com)。デフォルトの- databricks_postgresデータベースを所有します。- databricks_superuserのメンバー (CREATEDB、CREATEROLE、および BYPASSRLS 権限を継承します)。さらに、ログインおよびレプリケーション権限も持っています。
- databricks_superuser: すべてのデータベース、スキーマ、テーブル、およびシーケンスに対するすべての権限(付与付き)を持つ管理ロール。- pg_stat_statements_reset()の- EXECUTE。CREATEDB、CREATEROLE、および BYPASSRLS 権限を持ちます。ログインできません(NOLOGIN)。このロールは自動化されたアプリケーションでは使用しないでください。
詳細:事前作成されたロール
Postgresロールに権限を付与する
Postgres ロールを作成した後、ロールが特定のデータベース、スキーマ、およびテーブルにアクセスできるようにデータベース権限を付与する必要があります。デフォルトでは、新しく作成された Postgres ロールにはデータベース権限がありません。
権限を割り当てるには、標準の Postgres GRANTコマンドを使用します。
テーブルへの読み取りアクセスを許可します。
GRANT SELECT ON TABLE schema_name.table_name TO role_name;
テーブルへの書き込みアクセスを許可します。
GRANT INSERT, UPDATE, DELETE ON TABLE schema_name.table_name TO role_name;
データベースに対するすべての権限を付与します。
GRANT ALL PRIVILEGES ON DATABASE database_name TO role_name;
スキーマ レベルの権限を付与します。
-- Allow creating objects in a schema
GRANT CREATE ON SCHEMA schema_name TO role_name;
-- Allow using a schema (required to access objects within it)
GRANT USAGE ON SCHEMA schema_name TO role_name;
スキーマ内のすべてのテーブルに対する権限を付与します。
-- Grant read access to all existing tables in a schema
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO role_name;
-- Grant write access to all existing tables in a schema
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_name TO role_name;
-- Automatically grant permissions on future tables in a schema
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO role_name;
権限を取り消す:
REVOKE CONNECT ON DATABASE database_name FROM role_name;
データベースの所有権
Postgres では、データベース所有者は、データベースを作成したか、所有権が割り当てられたロールです。データベースの所有権により包括的な権限が付与されます:
データベース所有者に付与される権限:
- フルコントロール : データベースの削除を含む、データベースに対する完全なコントロール
- すべての権限 : データベースに対する自動ALL PRIVILEGES(CREATE、CONNECT、TEMPORARY)
- 権限の付与 : データベースに対する権限を他のロールに付与および取り消す機能
- スキーマ作成 : データベース内にスキーマを作成できます
- オブジェクトの所有権 : データベースにデフォルトで作成されるすべてのオブジェクトを所有します
- データベースの変更 : データベースの設定とプロパティを変更できます
Lakebase プロジェクトの場合:
- Databricks ID ロール (例: user@databricks.com) は、デフォルトのdatabricks_postgresデータベースを所有しています
- データベース所有者は、 GRANTステートメントを使用して権限を他のロールに委任できます。
詳しくは、PostgreSQLドキュメントの権限を参照してください。
Postgresの権限を確認する
これらの SQL クエリを使用して、データベース プロジェクトの権限とロール メンバーシップを確認します。
すべての役割とその属性を一覧表示する
データベース内のすべてのロールとその機能を表示します。
SELECT rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin
FROM pg_roles
ORDER BY rolname;
ロールメンバーシップを確認する
特定のユーザーが属するロールを確認します。
SELECT r.rolname as "Role name"
FROM pg_roles r
JOIN pg_auth_members m ON r.oid = m.roleid
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = '<your_role>');
ロールのテーブル権限を確認する
publicスキーマ内のテーブルに対するロールの権限を表示します。
SELECT
  schemaname,
  tablename,
  has_table_privilege('<your_role>', schemaname||'.'||tablename, 'SELECT') as can_select,
  has_table_privilege('<your_role>', schemaname||'.'||tablename, 'INSERT') as can_insert,
  has_table_privilege('<your_role>', schemaname||'.'||tablename, 'UPDATE') as can_update,
  has_table_privilege('<your_role>', schemaname||'.'||tablename, 'DELETE') as can_delete
FROM pg_tables
WHERE schemaname = 'public';
データベース接続権限を確認する
ロールがデータベースに接続できるかどうかを確認します。
SELECT has_database_privilege('<your_role>', 'lakebase', 'CONNECT');
ロールのメンバーを一覧表示する
databricks_superuserのメンバーであるすべてのロールを表示します:
SELECT
  pg_get_userbyid(member) as member_role
FROM pg_auth_members
WHERE roleid = (SELECT oid FROM pg_roles WHERE rolname = 'databricks_superuser');
ロールの継承階層を確認したり、詳細な権限マトリックスを表示したり、ロール管理者を見つけたりする追加の高度なクエリについては、Lakebase パブリック プレビュー ドキュメントの「Postgres ロールの管理」を参照してください。
次のステップ
- Postgres ロールの管理- データベース アクセス用の追加の Postgres ロールを作成する
- データベース プロジェクトに接続- OAuth トークンまたは Postgres パスワードを使用してデータベースに接続します
- データのクエリ- SQL エディタ、psql、またはその他の Postgres ツールを使用してデータベースをクエリします。