Privilege FAQ
必要なロールがユーザーに割り当てられているにもかかわらず、「no permission」というエラーメッセージが報告されるのはなぜですか?
このエラーは、ロールがアクティブ化されていない場合に発生することがあります。select current_role(); を実行して、現在のセッションでユーザーにアクティブ化されているロールを確認できます。必要なロールがアクティブ化されていない場合は、SET ROLE を実行してこのロールをアクティ ブ化し、このロールを使用して操作を行います。
ログイン時にロールを自動的にアクティブ化したい場合、user_admin ロールは SET DEFAULT ROLE または ALTER USER DEFAULT ROLE を実行して、各ユーザーのデフォルトロールを設定できます。デフォルトロールが設定されると、ユーザーがログインした際に自動的にアクティブ化されます。
すべてのユーザーのすべての割り当てられたロールをログイン時に自動的にアクティブ化したい場合は、次のコマンドを実行できます。この操作には、システムレベルでの OPERATE 権限が必要です。
SET GLOBAL activate_all_roles_on_login = TRUE;
ただし、潜在的なリスクを防ぐために、限定された権限を持つデフォルトロールを設定する「最小権限」の原則に従うことをお勧めします。例えば:
- 一般ユーザーは、SELECT 権限のみを持つ
read_onlyロールをデフォルトロールとして設定し、ALTER、DROP、INSERT などの権限を持つロールをデフォルトロールとして設定しないようにします。 - 管理者は、
db_adminロールをデフォルトロールとして設定し、ノードの追加や削除の権限を持つnode_adminロールをデフォルトロールとして設定しないようにします。
このアプローチは、ユーザーに適切な権限を持つロールを割り当てることを保証し、意図しない操作のリスクを軽減します。
必要な権限やロールをユーザーに割り当てるには、GRANT を実行できます。