このトピックでは、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 |
|
revoke |
|
alter default privileges | 以前の権限モデルでは、権限付与は現在および過去のテーブルに対してのみ有効でした。 将来のテーブルに対しては、再度権限を付与する必要があります。 簡易モデルでは、テーブルの作成時間を考慮する必要はありません。 対応する権限を付与するには、ユーザーをユーザーグループに追加するだけで済みます。 したがって、将来のテーブルに対して権限を付与する必要はありません。 |
create role / drop role / alter role / alter role set デフォルトのユーザーグループ | db_admin、db_developer、db_writer、および db_viewer ユーザーグループは、デフォルトのシステムユーザーグループです。 これらは、簡易権限モデルが有効になった後に自動的に生成されます。 スーパーユーザを含むユーザーは、これらのデフォルトユーザーグループを作成または変更することはできません。 |
rename to/from デフォルトのユーザーグループ | 予約済みのユーザーグループ |