権限を管理する
プレビュー
この機能は次のリージョンでパブリック プレビュー段階にあります: us-east-1 、 us-west-2 、 eu-west-1 。
Lakebase オートスケールは、オートスケール コンピュート、ゼロへのスケール、分岐、即時復元を備えた Lakebase の新しいバージョンです。 Lakebase プロビジョニングとの機能の比較については、 「バージョン間の選択」を参照してください。
Lakebase プロジェクトで Postgres ロールにデータベース権限を付与する方法を学習します。
前提条件: 権限を付与する前に、Postgres ロールを作成しておく必要があります。Lakebase UI を使用してネイティブの Postgres パスワード ロールを作成することも、 databricks_auth拡張機能を使用して Databricks ID の OAuth ロールを作成することもできます。「Postgres ロールの作成」を参照してください。
Lakebase Postgres は 2 つの権限レイヤーを使用します。
- プロジェクト権限は、 ブランチの作成やコンピュートの管理など、プラットフォーム レベルのアクションを制御します。 CAN MANAGE 権限には、すべての CAN CREATE 機能と完全な管理制御が含まれます。
- Postgres ロールは、 データベース自体内のデータへのアクセスを制御します。
これらの権限は独立しており、ビジネスニーズに応じて個別に付与できます。
このページでは、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;
スキーマ内の将来のテーブルに対する権限を付与します。
-- Grants permissions on future tables created by the current user.
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO role_name;
-- Grants permissions on future tables created by table_creator_role_name.
-- Note that only members of table_creator_role_name can run this command.
ALTER DEFAULT PRIVILEGES FOR ROLE table_creator_role_name 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 ツールを使用してデータベースをクエリします。