すべてのプロダクト
Search
ドキュメントセンター

Hologres:エキスパート権限モデル

最終更新日:Jun 19, 2026

Hologres は PostgreSQL と互換性があり、PostgreSQL の標準権限モデルとして知られる同じ認可システムを使用します。本トピックでは、Hologres でユーザー権限を付与および剥奪する方法について説明します。

権限の付与

Hologres インスタンスを開発ツールに接続した後、SQL ステートメントを実行して、PostgreSQL の標準権限モデルでユーザーに権限を付与できます。

  1. ユーザーの作成

    Hologres にアクセスしてデータ開発を行うには、最初にアカウントを Hologres ユーザーとして作成する必要があります。

    ユーザーを作成する構文は次のとおりです:

    -- Hologresインスタンスにログインする権限を持つユーザーを作成します。RAM ユーザーに権限を付与する場合は、RAM ユーザーで要求される形式を使用してください。
    CREATE USER "Alibaba Cloud account ID/RAM user"; 
    -- ユーザーを作成し、スーパーユーザー権限を付与します。
    CREATE USER "Alibaba Cloud account ID/RAM user" SUPERUSER;

    以下の例を参考にユーザーを作成できます。Alibaba Cloud アカウントと RAM ユーザーの形式の詳細については、「Account overview」をご参照ください。

    -- Alibaba CloudアカウントIDを使用してユーザーを作成します。
    CREATE USER "11822780xxx";
    -- RAM ユーザーにスーパーユーザー権限を付与します。
    CREATE USER "p4_1822780xxx" SUPERUSER; 

    ロールの作成の詳細については、「CREATE ROLE」をご参照ください。

  2. 権限の付与

    Hologres ユーザーを作成した後、そのユーザーに権限を付与する必要があります。PostgreSQL の標準権限モデルでは、データベース、テーブル、ビュー、列の各レベルでユーザー権限を制御できます。以下の表に、Hologres における一般的な認可操作を示します。

    説明

    PostgreSQL の標準権限モデルでは、既存のオブジェクトに対してのみ権限を付与できます。これらの権限は、付与後に作成されたオブジェクトには適用されません。たとえば、ユーザー A がpublic スキーマ内のすべてのテーブルに対する SELECT 権限をユーザー B に付与した後に新しいテーブルを作成した場合、ユーザー B は新しいテーブルに対する SELECT 権限を持ちません。ユーザー A は新しいテーブルに対して明示的に権限を付与する必要があります。

    説明

    構文例

    必須

    Hologres インスタンスにログインする権限を持つユーザーを作成する

    CREATE USER "Alibaba Cloud account ID/RAM user";

    必須

    ユーザーを作成し、スーパーユーザー権限を付与する

    CREATE USER "Alibaba Cloud account ID/RAM user" SUPERUSER;

    任意

    スキーマに対する CREATE 権限を付与する

    GRANT CREATE ON SCHEMA schema_name TO "Alibaba Cloud account ID/RAM user";

    任意

    スキーマに対する USAGE 権限を付与する

    GRANT USAGE ON SCHEMA schema_name TO "Alibaba Cloud account ID/RAM user";

    必須

    説明

    テーブルをクエリするには、スキーマに対する USAGE 権限が必要です。

    public スキーマ内のすべてのテーブルに対する SELECT、INSERT、UPDATE 権限をすべてのユーザーに付与する

    GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO PUBLIC;

    任意

    テーブルに対する SELECT 権限をユーザーに付与する

    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account ID/RAM user";

    任意

    テーブルに対する SELECT 権限を、GRANT OPTION 付きでユーザーに付与する

    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account ID/RAM user" WITH GRANT OPTION;

    任意

    public スキーマ内のすべてのテーブルに対する SELECT 権限をユーザーに付与する

    GRANT SELECT ON ALL TABLES IN SCHEMA public TO "Alibaba Cloud account ID/RAM user";

    任意

    現在のロールによってpublic スキーマに作成される将来のテーブルに対する SELECT 権限を、すべてのユーザーに付与する

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;

    任意

    一般ユーザーをスーパーユーザーに変更する

    ALTER USER "Alibaba Cloud account ID/RAM user" SUPERUSER;

    任意

    スーパーユーザーを一般ユーザーに変更する

    ALTER USER "Alibaba Cloud account ID/RAM user" NOSUPERUSER;

    任意

    テーブルの所有権を別のユーザーに移管する

    ALTER TABLE <tablename> OWNER TO "Alibaba Cloud account ID/RAM user";

    任意

    ログイン権限のないロールを作成する

    CREATE ROLE "Alibaba Cloud account ID/RAM user";

    任意

    ロールをユーザーに付与する

    GRANT <rolename> TO "Alibaba Cloud account ID/RAM user";

    任意

    テーブルの特定の列に対する SELECT 権限をユーザーに付与する

    GRANT SELECT (<column1>,<column2>,<column3>,...) ON TABLE <tablename> TO "Alibaba Cloud account ID/RAM user";

    任意

    ビューに対する SELECT 権限をユーザーに付与する

    説明
    • PostgreSQL の標準権限モデルでは、ビューにアクセスするには、そのビューに対する SELECT 権限が必要です。

    • 簡易権限モデル (SPM) / スキーマレベルの権限モデル (SLPM) では、ビューにアクセスするには viewer ユーザーグループ、またはそれ以上の権限を持つユーザーグループのメンバーである必要があります。

    -- PostgreSQL の標準権限モデルを使用して、ビューに対するSELECT権限をユーザーに付与します。 
    GRANT SELECT ON <viewname> TO "Alibaba Cloud account ID/RAM user";

    任意

    PostgreSQL の標準権限モデルでは、以下のステートメントを実行して、新しいユーザーにテーブルの SELECT 権限を付与できます:

    CREATE USER "Alibaba Cloud account ID/RAM user";
    GRANT USAGE ON SCHEMA <schema_name> TO "Alibaba Cloud account ID/RAM user";
    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account ID/RAM user";

    CREATE ROLE ステートメントは、ユーザーグループや特定の種類のユーザーを表す仮想ロールなど、Hologres インスタンスにログインする権限を持たないロールを作成するために使用されます。権限の付与の詳細については、「GRANT」をご参照ください。

  3. テーブルの削除

    テーブルを削除できるのは、スーパーユーザーまたはテーブル所有者のみです。ユーザーにテーブルを削除する権限を付与するには、以下のいずれかの方法を使用します:

    • テーブルの所有権を新しいユーザーに移管します。

      ALTER TABLE TABLENAME OWNER TO "Alibaba Cloud account ID/RAM user";
    • 新しいユーザーにスーパーユーザー権限を付与します。

      ALTER USER "Alibaba Cloud account ID/RAM user" SUPERUSER;
    • 複数のユーザーをユーザーグループに追加し、テーブルの所有権をユーザーグループに移管します。

      CREATE USER "Alibaba Cloud account ID/RAM user";
      CREATE ROLE <rolename>;
      GRANT <rolename> TO "Alibaba Cloud account ID/RAM user";
      ALTER TABLE <tablename> OWNER TO <rolename>;

将来のテーブルのデフォルト権限

デフォルトでは、PostgreSQL の標準権限モデルは将来のテーブルに対する権限を付与しません。将来のテーブルに権限を付与するには、ALTER DEFAULT PRIVILEGES ステートメントを使用する必要があります。

説明
  • このステートメントは、既存の論理オブジェクトには影響しません。

  • このステートメントでデフォルト権限を設定できるのは、テーブル、スキーマ、関数、シーケンス、または型のみです。

  1. 権限の付与

    • デフォルト権限を設定すると、特定のスキーマでユーザーが作成したテーブルを、指定したユーザーまたはすべてのユーザーがクエリできるようになります。以下のサンプルステートメントは、デフォルト権限の付与方法を示しています:

      • このステートメントを実行すると、すべてのユーザーが p4_id1 ユーザーによって public スキーマ に作成される将来のテーブルをクエリできます。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
      • このステートメントを実行すると、p4_id2 ユーザーは、p4_id1 ユーザーによって public スキーマ に作成される将来のテーブルをクエリできます。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO "p4_id2";
      • このステートメントを実行すると、すべてのユーザーが p4_id1 ユーザーによって test スキーマ に作成される将来のテーブルをクエリできます。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test GRANT SELECT ON TABLES TO PUBLIC;
    • デフォルト権限を剥奪するには、以下の SQL ステートメントを実行します:

      • p4_id1 ユーザーによって public スキーマ に作成される将来のテーブルに対するデフォルトの SELECT 権限を、すべてのユーザーから剥奪します。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM PUBLIC;
      • p4_id2 ユーザーから、p4_id1 ユーザーによって public スキーマ に作成される将来のテーブルに対するデフォルトの SELECT 権限を剥奪します。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM "p4_id2";
      • p4_id1 ユーザーによって test スキーマ に作成される将来のテーブルに対するデフォルトの SELECT 権限を、すべてのユーザーから剥奪します。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test REVOKE SELECT ON TABLES FROM PUBLIC;
  2. デフォルト権限が設定されていることの確認

    • psql クライアントで \ddp コマンドを実行し、ALTER DEFAULT PRIVILEGES ステートメントが成功したことを確認します。

    • Hologres で以下の SQL ステートメントを実行し、結果を直接クエリします:

      SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "Owner",
        n.nspname AS "Schema",
        CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS "Type",
        pg_catalog.array_to_string(d.defaclacl, E'\n') AS "Access privileges"
      FROM pg_catalog.pg_default_acl d
           LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.defaclnamespace
      ORDER BY 1, 2, 3;

    新しいテーブルが作成されると、Hologres は現在のユーザーとスキーマを pg_catalog.pg_default_acl システムカタログと照合します。一致する ALTER DEFAULT PRIVILEGES ルールが見つかった場合、そのルールが新しいテーブルに適用されます。現在のユーザーは以下のように判定されます:

    • 現在のロールがユーザーの場合、テーブル作成時の照合にはそのユーザーが使用されます。

    • ユーザーがテーブル作成前に SET SESSION ROLE GROUP1; ステートメントを実行すると、現在のロールが GROUP1 に変更されます。この場合、照合には GROUP1 が使用されます。

    照合ルールは、テーブルの作成時にのみトリガーされます。テーブル作成後に ALTER TABLE SET OWNER TO ステートメントを実行してテーブル所有者を変更しても、照合ルールはトリガーされません。

権限の剥奪

ユーザーから権限を剥奪するには、REVOKE ステートメントを実行します。権限の剥奪の詳細については、「REVOKE」をご参照ください。

スキーマ権限を剥奪する前に、対象アカウントが DataWorks のスケジュールジョブを所有しているかどうかを確認してください。所有している場合は、まず DataWorks Operation Center で、これらのジョブを有効で権限が付与されたアカウントに再割り当てしてください。そうしないと、次回の実行時に permission denied for schema というエラーでジョブが失敗します。

REVOKE SELECT ON TABLE tablename FROM "Alibaba Cloud account ID/RAM user"; -- RAM ユーザーから権限を剥奪する場合は、RAM ユーザーで要求される形式を使用してください。

システムカタログの権限

Hologres V3.0 以降では、ユーザーがデータベースに接続すると、pg_class、pg_attribute、pg_namespace システムカタログをクエリすることで、インスタンス内のすべてのスキーマとテーブルに関する情報を表示できます。これは、BI ツールや開発ツールで接続する場合に特に顕著です。これらのツールは、これらのシステムカタログからスキーマ、テーブル、列のリストを自動的に取得します。その結果、実データへのアクセス権限がなくても、任意のユーザーがメタデータを取得できてしまいます。この問題に対応するため、Hologres V3.0.23 以降では、これら 3 つのシステムカタログに対する行レベルセキュリティ (RLS) をサポートしています。これにより、認可されたユーザーのみが対応するメタデータを参照できます。RLS を有効にするには、以下の GUC パラメーターを設定します:

  • この GUC パラメーターが制御するのは、pg_class、pg_attribute、pg_namespace システムカタログのみです。

  • スーパーユーザーは、データベースごとにこのステートメントを 1 回実行する必要があります。

  • 設定後は、スーパーユーザー、オブジェクトの所有者、またはオブジェクト (テーブルまたはスキーマ) に対して何らかの権限を持つユーザーのみが、対応するメタデータを参照できます。その他のユーザーはメタデータを参照できません。

-- スーパーユーザーが設定します。
ALTER DATABASE <database_name> SET hg_experimental_enable_catalog_rls = on;
説明

システムカタログの詳細については、「System Catalogs」をご参照ください。

権限の表示

以下の SQL ステートメントを実行して、ユーザーのロールと権限を表示できます:

SELECT ROLNAME FROM pg_roles;
SELECT user_display_name(ROLNAME) FROM pg_roles;

ユーザーの削除

インスタンスを開発ツールに接続している場合、SQL ステートメントを実行してユーザーを削除できます。手順はユーザーの種類によって異なります。

  • 一般ユーザーの削除

    テーブル、ビュー、拡張機能などのオブジェクトを作成していない一般ユーザーを削除するには、以下のステートメントを実行するか、HoloWeb コンソールでユーザーを削除できます:

    drop user "Alibaba Cloud account ID/RAM user";
  • スーパーユーザーなどの管理者の削除

    スーパーユーザーなど、オブジェクトを作成してその所有者である管理者を削除するには、まずこれらのオブジェクトの所有権を移管する必要があります。これは、PostgreSQL の標準権限モデルでは特に重要です。ユーザーを直接削除しようとするとエラーになります。以下のステートメントを実行します:

    -- アカウントAが所有するオブジェクトをアカウントBに移管します。
    reassign owned by "Alibaba Cloud account ID/RAM user A" to "Alibaba Cloud account ID/RAM user B";     
    -- アカウントAを削除します。
    drop user "Alibaba Cloud account ID/RAM user A";

以下のいずれかの方法で、インスタンスから RAM ユーザーを削除できます:

DROP USER "Alibaba Cloud account ID/RAM user";
重要

RAM ユーザーを削除すると、以後そのユーザーはインスタンスに接続できず、オブジェクトにもアクセスできません。慎重に実行してください。

PostgreSQL には厳格な権限モデルがあります。ビジネス要件に基づいてアプローチを選択するためのベストプラクティスについては、「Authorization based on the standard PostgreSQL permission model」をご参照ください。