39

psql の特定のデータベース (「template0」など) のユーザーのリストを取得したいと考えています。ユーザーは誰ですか?または「template1」データベースの場合: - そこにいるユーザーは誰ですか?

すでに試しました:

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

3 に答える 3

78

ユーザーは実際には「データベース用」ではなく、クラスター用であり、データベースにアクセスするためのさまざまな権限が与えられています。ユーザーをリストする\du必要がありますが、接続する必要があります。何かのようなもの

psql template1 -c '\du'

コマンドラインプロンプトから行う必要があります。(または、データベースに接続しているときに\dupsql プロンプトから)。

于 2012-01-19T13:00:50.663 に答える
13

PostgreSQL では、ユーザーはデータベース クラスターごとであることを理解する必要があります。@Michael は、それらのリストを取得する方法をすでに示しています。

REVOKEそのため、およびを使用して特定のデータベースのアクセス許可を明示的に制限しない限りGRANT、クラスター内のすべてのユーザーは、クラスター内の任意のデータベースへの基本的なアクセス権を持っています。

特定のユーザーが実際にデータベースに対する特定の権限 ('CONNECT') を持っているかどうかを判断するには、次のようにします。

has_database_privilege(user, database, privilege)

特権機能の詳細については、マニュアルを参照してください。

特定のデータベースに対するすべての特定の権限を判別するには:

SELECT datname, datacl
FROM   pg_database
WHERE  datname = 'mydb';

特定の制限が適用されない場合は、NULL取得できます。datacl


それに加えて、データベースごと、およびpg_hba.confファイル内のユーザーごとにアクセスを制限できます。それはより低いレベルにあります。pg_hba.confデータベース自体がアクセスを許可している場合でも、ユーザーは接続できません。

于 2012-01-19T13:18:03.710 に答える