Psqlの特定のデータベースのユーザーのリストを取得したい-たとえば「template0」。ユーザーは誰ですか?または、「template1」データベースの場合:-ユーザーは誰ですか?
すでに試した:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
ユーザーは実際には「データベース用」ではなく、クラスター用であり、データベースにアクセスするためのさまざまな権限が付与されます。ユーザーをリストするには\du
は必要ですが、接続する必要があります。何かのようなもの
psql template1 -c '\du'
コマンドラインからプロンプトが行う必要があります。 (または\du
from psql Prompt データベースに接続しているとき)。
PostgreSQLユーザーはデータベースクラスターごとにであることを理解する必要があります。 @Michaelはすでにそれらのリストを取得する方法を示しています。
したがって、特定のデータベースのアクセス許可を REVOKE
およびGRANT
で明示的に制限しない限り、クラスター内のすべてのユーザーはクラスター内の任意のデータベースへの基本アクセス権を持ちます。
特定のuserがデータベースに対する特定の特権( 'CONNECT')を実際に持っているかどうかを判別するには:
has_database_privilege(user, database, privilege)
マニュアルの特権関数 の詳細。
特定のデータベースに対する特定の特権をすべて決定するには:
SELECT datname, datacl
FROM pg_database
WHERE datname = 'mydb';
特定の制限が適用されない場合、NULL
に対してdatacl
を取得します。
それに加えて、 pg_hba.conf
ファイル。それは下位レベルです。ユーザーは、pg_hba.conf
は、データベース自体がアクセスを許可する場合でも、彼を許可しません。
ロール/ユーザーを一覧表示するには
pg_rolesからrolnameを選択します。