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

Databricks ID の Postgres ロールを作成および管理する

備考

プレビュー

この機能は、us-east-1us-west-2eu-west-1ap-southeast-1ap-southeast-2eu-central-1us-east-2ap-south-1の各地域でパブリック プレビュー段階です。

Lakebase データベース インスタンス所有者の Databricks ID の Postgres ロールは自動的に作成されます。最初は、インスタンスの所有者のみがPostgresを介してインスタンスにログインしてアクセスできます。他の Databricks ID がデータベース インスタンスにログインできるようにするには、所有者が対応する Postgres ロールを作成する必要があります。

このページでは、PostgreSQL で追加の Databricks ID ベースのロールを追加および管理する方法について説明します。

Databricks ID に基づく Postgres ロールの作成

新しい Postgres ロールを作成する前に、次の要件を満たしていることを確認してください。

  • データベースに対する CREATE 権限と CREATE ROLE 権限が必要です。
  • Databricks ID (ユーザー、サービスプリンシパル、またはグループ) として認証し、ログインする必要があります。ネイティブ Postgres 認証セッションでは、Databricks ロールを作成できません。
  • 認証トークンは、ロールの作成時に有効であり、有効期限が切れていない必要があります。

databricks_create_role 関数を使用して、Databricks ID ベースの PostgreSQL ロールを追加および作成します。カスタム PostgreSQL 拡張機能 databricks_auth は、 databricks_create_role 機能を提供します。

  1. databricks_auth 拡張機能を作成します。各Postgresデータベースには、独自の拡張子が必要です。

    SQL
    CREATE EXTENSION IF NOT EXISTS databricks_auth;
  2. databricks_create_role 関数を使用して、Databricks ID の新しい Postgres ロールを追加および作成します。ロールがまだ存在していない必要があります。同じ名前のロールが存在する場合は、Databricks ID ベースのロールを作成する前にドロップします。

    SQL
    SELECT databricks_create_role('identity_name', 'identity_type');

    identity_name パラメーターと identity_type パラメーターは、Databricks ID の種類によって異なります。

    • Databricks ユーザー:

      • identity_name:ユーザーのEメール myuser@databricks.com
      • identity_type: USER
      SQL
      SELECT databricks_create_role('myuser@databricks.com','USER');
    • Databricks サービスプリンシパル:

      • identity_name:サービスプリンシパルのアプリケーションID(例:) 8c01cfb1-62c9-4a09-88a8-e195f4b01b08
      • identity_type: SERVICE_PRINCIPAL
      SQL
      SELECT databricks_create_role('8c01cfb1-62c9-4a09-88a8-e195f4b01b08','SERVICE_PRINCIPAL');
    • Databricks グループ:

      • identity_name: グループの名前 (大文字と小文字が区別されます): My Group 123
      • identity_type: GROUP
      SQL
      SELECT databricks_create_role('My Group 123','GROUP');

Postgres ロールの権限を付与する

databricks_create_roleを使用して作成されたロールには、作成後にPUBLICにのみ付与される権限があります。追加の権限を付与または取り消すには、標準の Postgres 権限管理コマンド GRANT および REVOKEを使用します。

ロールにテーブルへの読み取り権限を付与します。

SQL
GRANT SELECT ON "my_schema"."my_table" TO <role-name>;

ロールからテーブルへの書き込みアクセス権を削除します。

SQL
REVOKE INSERT, UPDATE, DELETE ON TABLE "my_schema"."my_table" FROM <role-name>;

ロールからデータベースへのすべてのアクセスを取り消します。

SQL
REVOKE CONNECT ON DATABASE "example_database" FROM <role-name>;

Databricks ID ロールの表示

デフォルトによって作成されたすべての Databricks ID ロールと databricks_create_role 関数の使用によって作成された ID ロールを一覧表示するには、databricks_auth 拡張機能の databricks_list_roles 関数を使用します。これには、Postgres ロールとして認証に追加されたすべての Databricks ユーザー、サービスプリンシパル、およびグループが一覧表示されます。

SQL
CREATE EXTENSION IF NOT EXISTS databricks_auth;
SQL
SELECT * from databricks_list_roles;

Databricks ID ベースの Postgres ロールとして認証する

上記の手順に従って Databricks ID の Postgres ロールを作成した後、ID の種類に基づいて Postgres にログインするために使用できます。

ユーザーまたはサービスプリンシパルとして認証Databricks

Databricksユーザーまたはサービスプリンシパルを使用してPostgresに認証することは、OAuthトークンを使用してPostgresに認証することと同じです。

Databricks グループとして認証する

グループとグループのメンバーシップは Databricks から Postgres に同期されず、 Unity Catalog のアクセス許可も同期されません。 ただし、Databricks グループが Postgres に追加されると、グループ内の任意の Databricks ユーザーは、ユーザーのパスワードを使用してグループとしてログインできます。これにより、Postgres のグループレベルで権限を管理できます。Databricks グループ ID の直接または間接のメンバー (ユーザーまたはサービスプリンシパル) は、Postgres に対して認証を行い、Databricks グループ Postgres ロールとしてログインできます。

ユーザーまたはサービスプリンシパル トークンを使用してグループ ID として認証する場合、グループ メンバーシップは認証時にのみ検証されます。 以前にグループメンバートークンを使用して開いた接続は、認証後にメンバーがグループから削除されても閉じられません。削除されたグループメンバーからの新しい接続要求は、認証中に拒否されます。

Bash
export PGPASSWORD='<OAuth token of a group member>'
export GROUPROLENAME = <pg-case-sensitive-group-role-name>

psql -h $HOSTNAME -p 5432 -d databricks_postgres -U $GROUPROLENAME

データベースインスタンスの Databricks ワークスペースに割り当てられたグループのみが、グループベースのPostgresログインでサポートされます。 ワークスペースにグループを割り当てる方法については、「 ワークスペースにグループを割り当てる」を参照してください。

Databricks ID ベースの Postgres ロールを削除する

Databricks ID ベースの Postgres ロールは、他の Postgres ロールと同じように削除および削除できます。詳細については、 ロールの削除に関するPostgreSQLのドキュメントを参照してください。Databricks の ID ベースのロールを削除すると、トークンベースの認証や Postgres へのアクセスに使用できなくなります。