メインコンテンツまでスキップ

権限を管理する

備考

ベータ版

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 などを使用)、ユーザーには次のものが必要です。

  1. 対応するPostgresロール
  2. そのロールに付与された明示的なデータベース権限

事前に作成されたロールとデフォルトの権限

データベース プロジェクトを作成すると、Lakebase によって、アクセス レベルの異なる複数の Postgres ロールが自動的に作成されます。これらのデフォルト ロールを理解すると、追加の権限を付与するタイミングを決定するのに役立ちます。

事前に作成されたロール:

ロール

LOGIN

CREATEDB

CREATEROLE

複製

BYPASSRLS

<project_owner_role>

databricks_superuser

デフォルトの権限:

  • <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コマンドを使用します。

テーブルへの読み取りアクセスを許可します。

SQL
GRANT SELECT ON TABLE schema_name.table_name TO role_name;

テーブルへの書き込みアクセスを許可します。

SQL
GRANT INSERT, UPDATE, DELETE ON TABLE schema_name.table_name TO role_name;

データベースに対するすべての権限を付与します。

SQL
GRANT ALL PRIVILEGES ON DATABASE database_name TO role_name;

スキーマ レベルの権限を付与します。

SQL
-- 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;

スキーマ内のすべてのテーブルに対する権限を付与します。

SQL
-- 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;

権限を取り消す:

SQL
REVOKE CONNECT ON DATABASE database_name FROM role_name;

詳細: PostgreSQL 権限ドキュメント

データベースの所有権

Postgres では、データベース所有者は、データベースを作成したか、所有権が割り当てられたロールです。データベースの所有権により包括的な権限が付与されます:

データベース所有者に付与される権限:

  • フルコントロール : データベースの削除を含む、データベースに対する完全なコントロール
  • すべての権限 : データベースに対する自動ALL PRIVILEGES ( CREATECONNECTTEMPORARY )
  • 権限の付与 : データベースに対する権限を他のロールに付与および取り消す機能
  • スキーマ作成 : データベース内にスキーマを作成できます
  • オブジェクトの所有権 : データベースにデフォルトで作成されるすべてのオブジェクトを所有します
  • データベースの変更 : データベースの設定とプロパティを変更できます

Lakebase プロジェクトの場合:

  • Databricks ID ロール (例: user@databricks.com ) は、デフォルトのdatabricks_postgresデータベースを所有しています
  • データベース所有者は、 GRANTステートメントを使用して権限を他のロールに委任できます。

詳しくは、PostgreSQLドキュメントの権限を参照してください。

Postgresの権限を確認する

これらの SQL クエリを使用して、データベース プロジェクトの権限とロール メンバーシップを確認します。

すべての役割とその属性を一覧表示する

データベース内のすべてのロールとその機能を表示します。

SQL
SELECT rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin
FROM pg_roles
ORDER BY rolname;

ロールメンバーシップを確認する

特定のユーザーが属するロールを確認します。

SQL
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スキーマ内のテーブルに対するロールの権限を表示します。

SQL
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';

データベース接続権限を確認する

ロールがデータベースに接続できるかどうかを確認します。

SQL
SELECT has_database_privilege('<your_role>', 'lakebase', 'CONNECT');

ロールのメンバーを一覧表示する

databricks_superuserのメンバーであるすべてのロールを表示します:

SQL
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 ロールの管理」を参照してください。

次のステップ