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 を実行して、必要な権限やロールをユーザーに割り当てることができます。
データベース内のすべてのテーブルに対する権限をユーザーに付与しました(GRANT ALL ON ALL TABLES IN DATABASE <db_name> TO USER <user_identity>;
)が、ユーザーがデータベース内でテーブルを作成できません。なぜですか?
データベース内でテーブルを作成するには、データベースレベルの CREATE TABLE 権限が必要です。この権限をユーザーに付与する必要があります。
GRANT CREATE TABLE ON DATABASE <db_name> TO USER <user_identity>;
データベースに対するすべての権限をユーザーに付与しました(GRANT ALL ON DATABASE <db_name> TO USER <user_identity>;
)が、ユーザーがこのデータベースで SHOW TABLES;
を実行しても何も返されません。なぜですか?
SHOW TABLES;
は、ユーザーが何らかの権限を持っているテーブルのみを返します。ユーザーがテーブルに対して権限を持っていない場合、そのテーブルは返されません。このデータベース内のすべてのテーブルに対して(例えば SELECT を使用して)ユーザーに何らかの権限を付与できます。
GRANT SELECT ON ALL TABLES IN DATABASE <db_name> TO USER <user_identity>;
上記のステートメントは、v3.0 より前のバージョンで使用されていた GRANT select_priv ON db.* TO <user_identity>;
と同等です。