メインコンテンツまでスキップ
バージョン: 3.2

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>; と同等です。