web-dev-qa-db-ja.com

PostgreSQLユーザーリスト

Psqlの特定のデータベースのユーザーのリストを取得したい-たとえば「template0」。ユーザーは誰ですか?または、「template1」データベースの場合:-ユーザーは誰ですか?

すでに試した:

\du+  -- no database is Listed not Users
Select * from "pg_users";  -- no database is listed
39
Arun Dambal

ユーザーは実際には「データベース用」ではなく、クラスター用であり、データベースにアクセスするためのさまざまな権限が付与されます。ユーザーをリストするには\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は、データベース自体がアクセスを許可する場合でも、彼を許可しません。

13

ロール/ユーザーを一覧表示するには

pg_rolesからrolnameを選択します。

4
Sachin Gupta