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

Hologres:簡易権限モデルの関数

最終更新日:Jan 13, 2026

このトピックでは、Hologres で簡易許可モデル (SPM) を管理するために呼び出すことができる関数について説明します。

関数の概要

このトピックでは、簡易権限モデルの関数と特徴について説明します。

  • spm_enable:簡易権限モデルを有効にします。

  • spm_migrate:テーブル、ビュー、外部テーブルなどの既存のインスタンスオブジェクトを SPM 権限モデルに移行します。

  • spm_create_user:ログイン権限のみを持つユーザーを作成します。 開発を行うには、ユーザーに特定の権限を付与する必要があります。

  • spm_grant:ユーザーをユーザーグループに追加します。

  • spm_revoke:ユーザーをユーザーグループから削除します。

  • spm_disable:現在の DB の簡易権限モデルを無効にします。

  • spm_cleanup:DB から SPM の予約済みユーザーグループをパージします。

spm_enable

  • 説明

    spm_enable() 関数は、簡易権限モデルを有効にします。

    spm_enable() 関数を呼び出すと、システムは自動的に {db}_admin、{db}_developer、{db}_writer、{db}_viewer の 4 つのユーザーグループを作成します。

  • 構文

    CALL spm_enable();
    説明

    インスタンスのスーパーユーザのみが spm_enable() 関数を呼び出すことができます。

  • 使用上の注意

    spm_enable() 関数を呼び出して SPM を有効にすると、次の変更が発生します:

    • DB に対するすべての権限が PUBLIC ユーザーグループから取り消されます。 その結果、明示的な権限を持たないユーザーはターゲット DB に接続できなくなります。

    • DB 内のすべてのスキーマに対するすべての権限が PUBLIC ユーザーグループから取り消されます。

    • {db}_admin、{db}_developer、{db}_writer、{db}_viewer グループはすべて DB に接続できます。

    • {db}_admin グループは、DB と DB 内のすべてのスキーマのオーナーになります。

    • {db}_developer、{db}_writer、{db}_viewer グループは、すべてのスキーマに対する USAGE 権限を持ちます。 {db}_developer グループは、すべてのスキーマに対する CREATE 権限も持ちます。

    • {db}_admin および {db}_developer グループのメンバーによって作成されたオブジェクトのオーナーは {db}_developer グループになります。 {db}_writer グループには読み取り/書き込み権限が付与され、{db}_viewer グループには読み取り専用権限が付与されます。

spm_migrate

  • 説明

    spm_migrate() 関数は、テーブル、ビュー、外部テーブルなどの既存のインスタンスオブジェクトを SPM 権限モデルに移行します。

  • 構文

    CALL spm_migrate( [ batch_size ] );

    次の表にパラメーターを示します。

    パラメーター

    説明

    有効値

    batch_size

    バッチ移行ごとのオブジェクトのサイズ。

    このパラメーターを 0 に設定すると、max_locks_per_transaction の現在の値がバッチサイズとして使用されます。

    値は [0, max_locks_per_transaction] の範囲内である必要があります。 この範囲外の値は無効です。 show max_locks_per_transaction; SQL コマンドを実行して、max_locks_per_transaction の実際の値を確認できます。

    ご利用のインスタンスに、簡易権限モデルに切り替えるオブジェクトが多数 (数千または数万) ある場合は、すべてのオブジェクトが切り替わるまで spm_migrate() 関数を複数回実行する必要があります。

    また、Hologres のリアルタイムデータウェアハウスに関するコミュニケーショングループに参加して、max_locks_per_transaction パラメーターの値の引き上げをリクエストしてから、操作を実行してください。 グループへの参加方法の詳細については、「オンラインサポートの詳細」をご参照ください。

  • 使用上の注意

    • spm_migrate() 関数を呼び出した後に DONE BUT NOT COMPLETED というメッセージが返された場合、すべてのオブジェクトが移行されたわけではありません。 spm_migrate() を再度呼び出す必要があります。

    • COMPLETED というメッセージが返された場合、すべてのオブジェクトが移行されています。

  • CALL spm_migrate(); // 最大で max_locks_per_transaction 個のオブジェクトを SPM 管理に切り替えます。
    
    CALL spm_migrate(128); // 128 個のオブジェクトを SPM 管理に切り替えます。

spm_create_user

  • 説明

    spm_create_user() 関数は、簡易権限モデルでユーザーを作成します。 作成されたユーザーはログイン権限のみを持ちます。 開発を行うには、ユーザーに特定の権限を付与する必要があります。

    説明

    スーパーユーザまたは {db}_admin グループのメンバーのみがこの関数を呼び出すことができます。

  • 構文

    CALL spm_create_user( user_name [, role_name] );

    次の表にパラメーターを示します。

    パラメーター

    説明

    user_name

    作成するユーザー名。 フォーマットは次のとおりです:

    • Alibaba Cloud アカウント (例:13432193xxxx または x*@aliyun.com)。

    • RAM ユーザーアカウント (例:RAM$mainaccount:subuser または p4_202338382183xxx)。

    role_name

    ユーザーを作成する際に、必要に応じてユーザーを次のいずれかのユーザーグループに追加できます:

    • {db}_admin

    • {db}_developer

    • {db}_writer

    • {db}_viewer

  • CALL spm_create_user('my_t***@aliyun.com');
    CALL spm_create_user('RAM$my_test:mysubuser', 'mydb_developer');
    CALL spm_create_user('13532313103042xxx');
    CALL spm_create_user('p4_23319103042xxx', 'mydb_admin');

spm_grant

  • 説明

    spm_grant() 関数は、ユーザーを {db}_admin、{db}_developer、{db}_writer、または {db}_viewer ユーザーグループに追加します。

    説明

    スーパーユーザまたは {db}_admin グループのメンバーのみがこの関数を呼び出すことができます。

  • 構文

    CALL spm_grant( role_name, user_name );

    次の表にパラメーターを示します。

    パラメーター

    説明

    role_name

    必要に応じて、ユーザーを次のいずれかのユーザーグループに追加できます:

    • {db}_admin

    • {db}_developer

    • {db}_writer

    • {db}_viewer

    ユーザーグループの権限の詳細については、「簡易権限モデル (SPM)」をご参照ください。

    user_name

    ユーザーグループに追加するユーザー名。 フォーマットは次のとおりです:

    • Alibaba Cloud アカウント (例:13432193xxxx または x*@aliyun.com)。

    • RAM ユーザーアカウント (例:RAM$mainaccount:subuser または p4_202338382183xxx)。

  • 使用上の注意

    • この関数は、簡易権限モデルが有効になった後にのみ呼び出すことができます。

    • user_name は Alibaba Cloud アカウントまたは Alibaba Cloud アカウント ID である必要があります。

    • role_name は {db}_admin、{db}_developer、{db}_writer、または {db}_viewer である必要があります。

  • CALL spm_grant('mydb_developer', 'p4_202338382183xxx');// RAM ユーザーに mydb データベースの開発者権限を付与します。
    CALL spm_grant('mydb_admin', 'RAM$my_test:xxx');// RAM ユーザーに mydb データベースの管理者権限を付与します。
    CALL spm_grant('otherdb_admin', '13532313103042xxx'); // エラー。 別の DB のロールにユーザーを追加するには、その DB に接続して spm_grant 関数を実行します。

spm_revoke

  • 説明

    spm_revoke() 関数は、ユーザーを {db}_admin、{db}_developer、{db}_writer、または {db}_viewer ユーザーグループから削除します。

    説明

    スーパーユーザまたは {db}_admin グループのメンバーのみがこの関数を呼び出すことができます。

  • 構文

    CALL spm_revoke( role_name, user_name );
  • 使用上の注意

    • この関数は、簡易権限モデルが有効になった後にのみ呼び出すことができます。

    • user_name は Alibaba Cloud アカウントまたは Alibaba Cloud アカウント ID である必要があります。

    • role_name は {db}_admin、{db}_developer、{db}_writer、または {db}_viewer である必要があります。

  • CALL spm_revoke('mydb_developer', 'p4_202338382183xxx');// RAM ユーザーを mydb データベースの開発者グループから削除します。
    CALL spm_revoke('mydb_admin', 'RAM$my_test:xxx');// RAM ユーザーを mydb データベースの管理者グループから削除します。
    CALL spm_revoke('otherdb_admin', '13532313103042xxx'); // エラー。 別の DB のユーザーグループからユーザーを削除するには、その DB に接続して spm_revoke を実行します。

spm_disable

  • 説明

    spm_disable() 関数は、現在の DB の簡易権限モデルを無効にします。

    説明

    スーパーユーザのみがこの関数を呼び出すことができます。

  • 構文

    CALL spm_disable();
  • 使用上の注意

    SPM をシャットダウンする方法は次のとおりです:

    • {db}_admin、{db}_developer、{db}_writer、および {db}_viewer ユーザーグループは保持されます。 エキスパートモードで権限付与文を使用して、これらのユーザーグループにユーザーを追加し、権限管理を行うことができます。 データベースオブジェクトのオーナーは {db}_developer のままです。

    • DB に対する CONNECT および TEMPORARY 権限が PUBLIC に付与されます。

    • DB 内の public スキーマに対する USAGE および CREATE 権限が PUBLIC に付与されます。

    • DB の public スキーマ内の関数およびプロシージャに対する EXECUTE 権限が PUBLIC に付与されます。

    • ユーザー定義の LANGUAGE に対する USAGE 権限が PUBLIC に付与されます。

    • ユーザー定義の TYPE に対する USAGE 権限が PUBLIC に付与されます。

  • CALL spm_disable();

spm_cleanup

  • 説明

    spm_cleanup() 関数は、{db}_admin、{db}_developer、{db}_writer、{db}_viewer を含む、DB から SPM の予約済みユーザーグループをパージします。

    説明

    スーパーユーザのみがこの関数を呼び出すことができます。

  • 構文

    CALL spm_cleanup( db_name [, batch_size ] );

    次の表にパラメーターを示します。

    パラメーター

    説明

    有効値

    db_name

    ユーザーグループをパージする DB。 特殊文字や大文字を含む db_name は、二重引用符で囲みます。 例:"MYDB"

    なし

    batch_size

    1 回のバッチで移行するオブジェクトの数。

    0 の値は、現在の max_locks_per_transaction の値が batch_size として使用されることを示します。

    [0, max_locks_per_transaction]。 この範囲外の値は無効です。

    ご利用のインスタンスに移行するオブジェクトが多数 (数千または数万) ある場合、ロックのオーバーフローが発生する可能性があります。 この場合、すべてのオブジェクトが移行されるまで spm_migrate() 関数を複数回実行してください。

    また、Hologres のコミュニケーショングループに参加して、max_locks_per_transaction パラメーターの値の引き上げをリクエストしてから、移行を実行してください。 グループへの参加方法については、「オンラインサポートの詳細」をご参照ください。

  • 使用上の注意

    • DONE BUT NOT COMPLETED というメッセージが返された場合、クリーンアップは不完全で、予約済みのユーザーグループは削除されていません。 spm_cleanup() 関数を再度呼び出す必要があります。

    • COMPLETED というメッセージが返された場合、クリーンアップは完了し、予約済みのユーザーグループは削除されています。 この関数を再度呼び出す必要はありません。

  • CALL spm_cleanup('mydb'); // 一度に最大 max_locks_per_transaction 個のオブジェクトの所有権を current_user に移管します。
    CALL spm_cleanup('mydb', 128);// 一度に 128 個のオブジェクトの所有権を current_user に移管します。
    • シナリオ 1: DB を削除してから、ユーザーグループをパージします。

      drop database mydb;
      CALL spm_cleanup('mydb');  // リトライは不要です。 操作は一度で成功します。
    • シナリオ 2: DB がまだ存在する場合、パージを実行するにはその DB に接続する必要があります。

       CALL spm_cleanup('otherdb');
      ERROR:  Permission Denied. execute in database otherdb, or drop database before call spm_cleanup.

関数の呼び出し権限

次の表は、異なるユーザーグループに対する関数の呼び出し権限を示しています。

関数

機能

スーパーユーザー

db_admin

db_developer | db_writer | db_viewer

spm_enable

簡易権限モデルを有効にします。

はい

いいえ

いいえ

spm_disable

簡易権限モデルを無効にします。

はい

付与されていません

いいえ

spm_grant

ユーザーをグループに追加します。

はい

はい

いいえ

spm_revoke

ユーザーをグループから削除します。

はい

付与済み

いいえ

spm_migrate

既存のテーブルまたはテーブルのようなオブジェクトを SPM 管理に移行します。

はい

付与済み

いいえ

spm_cleanup

DB のすべての予約済みユーザーグループを削除します。

はい

いいえ

いいえ

spm_create_user

ログイン権限のみを持つ単純なユーザーを作成します。

はい

はい

いいえ

制限された権限コマンド

簡易権限モデルを有効にすると、一部の権限関連コマンドが制限されます。 次の表に、簡易権限モデルで制限されているコマンドを示します。

ステートメント

説明

alter table owner to xx

すべてのテーブルのオーナーは、自動的に対応するスキーマの developer ユーザーグループになります。 オーナーは変更できず、手動で変更する必要もありません。

grant

spm_grant を使用してユーザーをユーザーグループに追加した後は、grant 文を実行する必要はありません。

revoke

spm_revoke を使用してユーザーをユーザーグループに追加する場合、revoke 文を実行する必要はありません。

alter default privileges

以前の権限モデルでは、権限付与は現在および過去のテーブルに対してのみ有効でした。 将来のテーブルに対しては、再度権限を付与する必要があります。 簡易モデルでは、テーブルの作成時間を考慮する必要はありません。 対応する権限を付与するには、ユーザーをユーザーグループに追加するだけで済みます。 したがって、将来のテーブルに対して権限を付与する必要はありません。

create role / drop role / alter role / alter role set デフォルトのユーザーグループ

db_admin、db_developer、db_writer、および db_viewer ユーザーグループは、デフォルトのシステムユーザーグループです。 これらは、簡易権限モデルが有効になった後に自動的に生成されます。 スーパーユーザを含むユーザーは、これらのデフォルトユーザーグループを作成または変更することはできません。

rename to/from デフォルトのユーザーグループ

予約済みのユーザーグループ (*_admin, *_developer, *_writer, *_viewer) の名前は変更できません。