このトピックでは、Hologres のスキーマレベル権限モデル (SLPM) の関数について説明します。これらの関数を呼び出して、SLPM を管理できます。
概要
SLPM は、次の関数をサポートしています。
slpm_enable: SLPM を有効にします。
slpm_migrate: テーブル、ビュー、外部テーブルなどの既存のオブジェクトを SLPM に移行します。
slpm_create_user: SLPM にユーザーを作成します。
slpm_grant: {db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、または {db}.{schema}.viewer グループにユーザーを追加します。
slpm_revoke: {db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、または {db}.{schema}.viewer グループからユーザーを削除します。
slpm_disable: データベースの SLPM を無効にします。
slpm_cleanup: SLPM 用に保持されている {db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、および {db}.{schema}.viewer グループを削除します。
slpm_rename_schema: スキーマの名前を変更します。
slpm_enable
説明
slpm_enable: SLPM を有効にします。
slpm_enable 関数を呼び出すと、システムは自動的に次のユーザーグループを作成します: {db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、および {db}.{schema}.viewer。
構文
CALL slpm_enable ();説明slpm_enable 関数を呼び出すには、Hologres インスタンスのスーパーユーザーである必要があります。
使用上の注意
slpm_enable 関数を呼び出してデータベースの SLPM を有効にすると、ユーザーの権限に次の変更が発生します。
データベースに対する PUBLIC グループのすべての権限が取り消されます。これにより、権限のないユーザーがデータベースに接続できなくなります。
データベースのすべてのスキーマに対する PUBLIC グループのすべての権限が取り消されます。
{db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、および {db}.{schema}.viewer グループのユーザーは、データベースに接続する権限を持ちます。
{db}.admin グループのユーザーは、データベースとデータベースのすべてのスキーマの所有者になります。
{db}.{schema}.developer、{db}.{schema}.writer、および {db}.{schema}.viewer グループのユーザーは、スキーマに対する USAGE 権限を持ちます。 {db}.{schema}.developer グループのユーザーは、スキーマに対する CREATE 権限を持ちます。
{db}.admin および {db}.{schema}.developer グループのユーザーがスキーマに基づいてオブジェクトを作成した後、{db}.{schema}.developer グループのユーザーはこれらのオブジェクトの所有者になります。 {db}.{schema}.writer グループのユーザーは、これらのオブジェクトに対する読み取りおよび書き込み権限を持ちます。 {db}.{schema}.viewer グループのユーザーは、これらのオブジェクトに対する読み取り専用権限を持ちます。
{db}.admin および {db}.{schema}.developer グループのユーザーが、外部サーバー、外部データラッパー、言語など、スキーマを持たないオブジェクトを作成した後、{db}.admin グループのユーザーはこれらのオブジェクトの所有者になります。 {db}.{schema}.developer、{db}.{schema}.writer、および {db}.{schema}.viewer グループのユーザーは、これらのオブジェクトに対する USAGE 権限を持ちます。
slpm_migrate
説明
slpm_migrate: テーブル、ビュー、外部テーブルなどの既存のオブジェクトを SLPM に移行します。
構文
CALL slpm_migrate ( [ batch_size ] );次の表は、構文のパラメーターについて説明しています。
パラメーター
説明
値の範囲
batch_size
一度に移行できるオブジェクトの最大数。
このパラメーターを 0 に設定すると、一度に移行できるオブジェクトの最大数は、max_locks_per_transaction パラメーターによって指定されます。
[1, 64]。このパラメーターは、この範囲を超える値の場合は無効です。
データベースに数百個などの多くのオブジェクトが含まれている場合は、すべてのオブジェクトが移行されるまで、slpm_migrate 関数を複数回呼び出す必要があります。
データベースに数千、あるいは数万を超える多数のオブジェクトが含まれている場合は、オブジェクトを移行する前に、DingTalk グループでテクニカルサポートに連絡して max_locks_per_transaction パラメーターの値を増やすことをお勧めします。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
使用上の注意
DONE BUT NOT COMPLETEDメッセージが slpm_migrate 関数を呼び出した後に返された場合、まだ移行するオブジェクトが残っています。この場合、slpm_migrate 関数を再度呼び出してください。COMPLETEDメッセージが返された場合、すべてのオブジェクトが移行されています。
例
CALL slpm_migrate (); // オブジェクトを SLPM に移行します。移行できるオブジェクトの最大数は max_locks_per_transaction パラメーターによって指定されます。 CALL slpm_migrate (64); // 最大 64 個のオブジェクトを SLPM に移行します。
slpm_create_user
説明
slpm_create_user: SLPM にユーザーを作成します。この関数を呼び出してユーザーを作成した後、ユーザーはログオン権限のみを持ちます。ユーザーがデータ分析を実行できるようにするには、ユーザーに特定の権限を付与する必要があります。
説明slpm_create_user 関数を呼び出すには、スーパーユーザーまたはデータベースの {db}.admin グループのメンバーである必要があります。
構文
CALL slpm_create_user ( user_name [, role_name] );次の表は、構文のパラメーターについて説明しています。
パラメーター
説明
user_name
作成するユーザーの名前。次のいずれかの形式で名前を指定できます。
Alibaba Cloud アカウントの ID または表示名 (例: 13432193xxxx または x*@aliyun.com)。
p4_ が前に付いた RAM ユーザーの UID または RAM ユーザーの表示名 (例: p4_202338382183xxx または RAM$mainaccount:subuser)。
role_name
ユーザーを追加するグループ。ビジネスニーズに基づいて、次のいずれかのグループにユーザーを追加できます。
{db}.admin
{db}.{schema}.developer
{db}.{schema}.writer
{db}.{schema}.viewer
ユーザーグループの権限の詳細については、「SLPM のユーザーグループと権限」をご参照ください。
例
CALL slpm_create_user ('my_t***@aliyun.com'); CALL slpm_create_user ('RAM$my_test:mysubuser', 'mydb.public.developer'); CALL slpm_create_user ('13532313103042xxx'); CALL slpm_create_user ('p4_23319103042xxx', 'mydb.admin');
slpm_grant
説明
slpm_grant: {db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、または {db}.{schema}.viewer グループにユーザーを追加します。
説明slpm_grant 関数を呼び出すには、スーパーユーザーまたはデータベースの {db}.admin グループのメンバーである必要があります。
構文
CALL slpm_grant ( role_name, user_name );次の表は、構文のパラメーターについて説明しています。
パラメーター
説明
user_name
権限を付与するユーザーの名前。次のいずれかの形式で名前を指定できます。
Alibaba Cloud アカウントの ID または表示名 (例: 13432193xxxx または x*@aliyun.com)。
p4_ が前に付いた RAM ユーザーの UID または RAM ユーザーの表示名 (例: p4_202338382183xxx または RAM$mainaccount:subuser)。
role_name
ユーザーを追加するグループ。ビジネスニーズに基づいて、次のいずれかのグループにユーザーを追加できます。
{db}.admin
{db}.{schema}.developer
{db}.{schema}.writer
{db}.{schema}.viewer
ユーザーグループの権限の詳細については、「SLPM のユーザーグループと権限」をご参照ください。
使用上の注意
この関数は、SLPM が有効になっている場合にのみ呼び出すことができます。
user_name パラメーターの値は、Alibaba Cloud アカウントまたは RAM ユーザーのアカウント ID または表示名である必要があります。
role_name パラメーターの値は、{db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、または {db}.{schema}.viewer のいずれかの形式である必要があります。
例
CALL slpm_grant ('mydb.public.developer', 'p4_202338382183xxx'); // 指定された RAM ユーザーを mydb.public.developer グループに追加します。 CALL slpm_grant ('mydb.admin', 'RAM$my_test:xxx'); // 指定された RAM ユーザーを mydb.admin グループに追加します。 CALL slpm_grant ('otherdb.admin', '13532313103042xxx'); // この関数は失敗します。なぜなら、ユーザーは現在のデータベースのグループにしか追加できないからです。別のデータベースのグループにユーザーを追加するには、そのデータベースに接続して slpm_grant 関数を呼び出します。
slpm_revoke
説明
slpm_revoke: {db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、または {db}.{schema}.viewer グループからユーザーを削除します。
説明slpm_grant 関数を呼び出すには、スーパーユーザーまたはデータベースの {db}.admin グループのメンバーである必要があります。
構文
CALL slpm_revoke ( role_name, user_name );使用上の注意
この関数は、SLPM が有効になっている場合にのみ呼び出すことができます。
user_name パラメーターの値は、Alibaba Cloud アカウントまたは RAM ユーザーのアカウント ID または表示名である必要があります。
role_name パラメーターの値は、{db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、または {db}.{schema}.viewer のいずれかの形式である必要があります。
例
CALL slpm_revoke ('mydb.public.developer', 'p4_202338382183xxx'); // 指定された RAM ユーザーを mydb.public.developer グループから削除します。 CALL slpm_revoke ('mydb.admin', 'RAM$my_test:xxx'); // 指定された RAM ユーザーを mydb.admin グループから削除します。 CALL slpm_revoke ('otherdb.admin', '13532313103042xxx'); // この関数は失敗します。なぜなら、ユーザーは現在のデータベースのグループからしか削除できないからです。別のデータベースのグループからユーザーを削除するには、そのデータベースに接続して slpm_revoke 関数を呼び出します。
slpm_disable
説明
slpm_disable: データベースの SLPM を無効にします。
説明slpm_disable 関数を呼び出すには、スーパーユーザーである必要があります。
構文
CALL slpm_disable ();使用上の注意
SLPM を無効にする場合は、次の項目に注意してください。
{db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、および {db}.{schema}.viewer グループは保持されます。標準の PostgreSQL 認可モデルで認可ステートメントを実行して、これらのユーザーグループにユーザーを追加できます。 {db}.{schema}.developer グループのユーザーは、引き続きデータベースオブジェクトの所有者です。
データベースに対する CONNECT および TEMPORARY 権限が PUBLIC グループに付与されます。
データベースのパブリックスキーマに対する USAGE および CREATE 権限が PUBLIC グループに付与されます。
データベースのパブリックスキーマの関数およびプロシージャに対する EXECUTE 権限が PUBLIC グループに付与されます。
データベースのユーザー定義言語に対する USAGE 権限が PUBLIC グループに付与されます。
データベースのユーザー定義型に対する USAGE 権限が PUBLIC グループに付与されます。
例
CALL slpm_disable ();
slpm_cleanup
説明
slpm_cleanup: SLPM 用に保持されている {db}.admin、{db}.{schema}.developer、{db}.{schema}.writer、および {db}.{schema}.viewer グループを削除します。
説明slpm_cleanup 関数を呼び出すには、スーパーユーザーである必要があります。
構文
CALL slpm_cleanup ( db_name [, batch_size ] );次の表は、構文のパラメーターについて説明しています。
パラメーター
説明
値の範囲
db_name
ユーザーグループを削除するデータベースの名前。
名前に特殊文字または大文字が含まれている場合は、
"MYDB"のように二重引用符 (" ") で囲みます。batch_size
一度に移行できるオブジェクトの最大数。
このパラメーターを 0 に設定すると、一度に移行できるオブジェクトの最大数は、max_locks_per_transaction パラメーターによって指定されます。このパラメーターのデフォルト値は 64 です。
[0, 64]。このパラメーターは、この範囲を超える値の場合は無効です。
データベースに数百個などの多数のオブジェクトが含まれている場合は、すべてのオブジェクトが移行されるまで slpm_cleanup() 関数を複数回呼び出す必要があります。
データベースに数千、あるいは数万を超える多数のオブジェクトが含まれている場合は、オブジェクトを移行する前に、DingTalk グループでテクニカルサポートに連絡して batch_size パラメーターの値を増やすことをお勧めします。
使用上の注意
DONE BUT NOT COMPLETEDメッセージが slpm_cleanup 関数を呼び出した後に返された場合、まだ移行するオブジェクトが残っており、ユーザーグループは削除されません。この場合、slpm_cleanup 関数を再度呼び出してください。COMPLETEDメッセージが返された場合、すべてのオブジェクトが移行され、ユーザーグループが削除されます。
例
CALL slpm_cleanup ('mydb'); // オブジェクトのオーナーを現在のユーザーに変更します。オーナーを変更できるオブジェクトの最大数は、max_locks_per_transaction パラメーターによって指定されます。 CALL slpm_cleanup ('mydb', 64); // 最大 64 個のオブジェクトのオーナーを現在のユーザーに変更します。ケース 1: データベースを削除してから、データベースのユーザーグループを削除します。
drop database mydb; CALL slpm_cleanup ('mydb'); // 削除されたデータベースのユーザーグループを一度に削除できます。ケース 2: 既存のデータベースのユーザーグループを削除します。この場合は、データベースに接続する必要があります。
CALL slpm_cleanup ('otherdb'); ERROR: Permission Denied. execute in database otherdb, or drop database before call slpm_cleanup.
slpm_rename_schema
説明
slpm_rename_schema: スキーマの名前を変更します。
SLPM が有効になっているデータベースの名前を変更した後、4 つのユーザーグループの名前も変更する必要があります。 slpm_rename_schema 関数は、ユーザーグループの名前を自動的に変更します。そのため、スキーマの名前を変更するには、この関数を呼び出す必要があります。
説明slpm_rename_database 関数を呼び出すには、スーパーユーザーまたはデータベースの {db}.admin グループのメンバーである必要があります。
構文
CALL slpm_rename_schema ( old_name, new_name );次の表は、構文のパラメーターについて説明しています。
パラメーター
説明
old_name
名前を変更するスキーマの元の名前。名前に特殊文字または大文字が含まれている場合は、
"MYDB"のように二重引用符 (" ") で囲みます。new_name
スキーマに指定する新しい名前。名前に特殊文字または大文字が含まれている場合は、
"MYDB"のように二重引用符 (" ") で囲みます。例
CALL slpm_rename_schema ('oldschema', 'newschema');