Privilege FAQ
Privilege FAQ
必要なロールをユーザーに割り当てた後、なぜ「権限がありません」というエラーメッセージが表示され続けるのですか?
このエラーは、ロールがアクティベートされていない場合に発生する可能性があります。カレントセッションのユーザーでアクティベートされたロールをクエリするには、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 を実行します。
ユーザーにデータベース内のすべてのテーブルに対する権限を付与しましたが、データベース内でテーブルを作成できません。なぜですか?
データベース内でテーブルを作成するには、データベースレベルの 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 より前のバージョンで使用される <user_identity>
に対して GRANT select_priv ON db.* TO <user_identity>;
のようなものです。