Hologres は、標準権限モデル、簡易権限モデル (SPM)、スキーマレベルの簡易権限モデル (SLPM) の 3 つの権限モデルを提供します。ビジネスニーズに応じてモデルを選択できます。ただし、インスタンスの使用中にモデルを切り替える必要がある場合があります。このトピックでは、これらの権限モデルをすばやく簡単に切り替える方法について説明します。
データベースの現在の権限モデルの表示
以下のいずれかの方法を使用して、現在のデータベースの権限モデルを表示します。
-
HoloWeb
HoloWeb で、Security Center モジュールの [DB 権限] ページで現在の権限モデルを表示します。詳細については、「DB 管理」をご参照ください。
-
SQL 文
次のコマンドを使用して、データベースで SPM または SLPM が有効になっているかどうかを確認します。
-- SPM が有効になっているかを確認します。 SHOW hg_experimental_enable_spm; -- SLPM が有効になっているかを確認します。 SHOW hg_enable_slpm;
簡易権限モデル (SPM) から標準権限モデルへの切り替え
-
注意事項
-
スーパーユーザのみが簡易権限モデルを無効にできます。
-
public ロールは、public スキーマに対する USAGE 権限と CREATE 権限を持ちます。
-
public ロールは、DB に対する CONNECT 権限と TEMPORARY 権限を持ちます。
-
public ロールは、関数とプロシージャに対する EXECUTE 権限を持ちます。
-
public ロールは、
language, data types (include domains)に対する USAGE 権限を持ちます。 -
public ロールは、テーブル、ビュー、マテリアライズドビュー、テーブル列、シーケンス、外部データラッパー、外部サーバー、スキーマ (public スキーマを除く) などの他のオブジェクトに対する権限を持ちません。
-
簡易権限モデルを無効にすると、ユーザーグループの権限は次のようになります。
-
admin:既存のオブジェクトに対する権限は保持されますが、これらの権限は新しいデータベースオブジェクトには適用されません。
-
developer ユーザーグループ:既存のオブジェクトに対する権限は保持されますが、これらの権限は新しいデータベースオブジェクトには適用されません。
-
writer ユーザーグループ:既存のオブジェクトに対する権限は保持されますが、これらの権限は新しいデータベースオブジェクトには適用されません。
-
viewer ユーザーグループ:既存のオブジェクトに対する権限は保持されますが、これらの権限は新しいデータベースオブジェクトには適用されません。
-
-
-
権限モデルの切り替え
次の SQL コマンドを実行して、簡易権限モデルを無効にします。その後、データベースは標準権限モデルを使用します。
-- 簡易モデルを無効にします。 CALL spm_disable (); -- ユーザーグループをクリーンアップします (任意)。 CALL spm_cleanup ('dbname');説明簡易権限モデルを無効にしても、対応するユーザーグループは削除されません。管理を容易にするために、ユーザーグループは削除しないでください。ユーザーグループをクリーンアップするには、DB 上で実行中の SQL 文がないことを確認してください。そうしないと、クリーンアップが失敗し、サービスに影響を与える可能性があります。
標準権限モデルから簡易権限モデル (SPM) への切り替え
次のコマンドを使用して、標準権限モデルから簡易権限モデルに切り替えます。
-- 現在の DB の簡易権限モデルを有効にします。
CALL spm_enable ();
-- DB 内の既存オブジェクトのオーナーを 'developer' に更新し、SPM で管理できるようにします。
CALL spm_migrate ();
エラー ERROR: cannot enable Simple Privilege Model for db=[xxxxxx] because roles conflict が報告された場合、以前に SPM が有効になっており、システムロールがまだ存在することを示します。この場合、次のコマンドを実行して、復元モードで SPM を有効にします。
-- 簡易権限モデルを再度有効にします。
CALL spm_enable ('t');
-- DB 内の既存オブジェクトのオーナーを 'developer' に更新し、SPM で管理できるようにします。
CALL spm_migrate ();
SPM に切り替えた場合、新しいアカウントに必要な権限があっても権限エラーが報告されることがあります。これは、以前のオブジェクトの移行が不完全であったことを示します。call spm_migrate (); コマンドを複数回実行してください。
簡易権限モデル (SPM) からスキーマレベルの簡易権限モデル (SLPM) への切り替え
SPM から SLPM に直接切り替える方法はありません。まず SPM から標準権限モデルに切り替え、次に標準権限モデルから SLPM に切り替える必要があります。コマンドは次のとおりです。
-- SPM を無効にして標準モデルに戻します。
CALL spm_disable ();
-- SPM のシステムロールをクリーンアップします。
CALL spm_cleanup ('dbname');
-- スキーマレベルの権限を有効にします。
CALL slpm_enable ();
-- DB 内の既存オブジェクトのオーナーを 'developer' に更新し、SLPM で管理できるようにします。この手順は必須です。
CALL slpm_migrate ();
エラー cannot enable slpm for database xxxxx because roles conflict. が報告された場合、以前に SLPM が有効になっており、システムロールがまだ存在することを示します。この場合、次のコマンドを実行して、復元モードで SLPM を有効にします。
-- SPM を無効にします。
CALL spm_disable ();
-- SPM のシステムロールをクリーンアップします。
CALL spm_cleanup ('dbname');
-- スキーマレベルの権限を有効にします (復元モードで SLPM を有効にする)。
CALL slpm_enable ('t');
-- DB 内の既存オブジェクトのオーナーを 'developer' に更新し、SLPM で管理できるようにします。この手順は必須です。
CALL slpm_migrate ();
SLPM に切り替えた場合、新しいアカウントに必要な権限があっても権限エラーが報告されることがあります。これは、以前のオブジェクトの移行が不完全であったことを示します。call slpm_migrate (); コマンドを複数回実行してください。
スキーマレベルの簡易権限モデル (SLPM) から簡易権限モデル (SPM) への切り替え
SLPM から SPM に直接切り替える方法はありません。まず SLPM から標準権限モデルに切り替え、次に標準権限モデルから SPM に切り替える必要があります。コマンドは次のとおりです。
-- SLPM を無効にします。
CALL slpm_disable ();
-- SLPM のシステムロールをクリーンアップします。
CALL slpm_cleanup ('dbname');
-- 現在の DB の簡易権限モデルを有効にします。
CALL spm_enable ();
-- DB 内の既存オブジェクトのオーナーを 'developer' に更新し、SPM で管理できるようにします。
CALL spm_migrate ();
エラー cannot enable spm for database xxxxx because roles conflict. が報告された場合、以前に SPM が有効になっており、システムロールがまだ存在することを示します。この場合、次のコマンドを実行して、復元モードで SPM を有効にします。
-- SLPM を無効にします。
CALL slpm_disable ();
-- SLPM のシステムロールをクリーンアップします。
CALL slpm_cleanup ('dbname');
-- SPM を有効にします (復元モードで SPM を有効にする)。
CALL spm_enable ('t')
-- DB 内の既存オブジェクトのオーナーを 'developer' に更新し、SPM で管理できるようにします。
CALL spm_migrate ();
SPM に切り替えた場合、新しいアカウントに必要な権限があっても権限エラーが報告されることがあります。これは、以前のオブジェクトの移行が不完全であったことを示します。call spm_migrate (); コマンドを複数回実行してください。