2012-01-19 3 views
35

psqlで特定のデータベースのユーザのリストを取得したいとします。たとえば "template0"です。ユーザーは誰ですか?または、「template1」データベース: - そこにいるユーザは誰ですか?すでに試したPostgreSQLのユーザリスト

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

答えて

71

ユーザーは、彼らがクラスタのためだとデータベースにアクセスするための異なる権限を与えられている、「データベースのために」、実際にはありません。ユーザーリストを表示するには、\duが必要ですが、接続する必要があります。何かのように

psql template1 -c '\du' 

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

+0

@マイケル、助けてくれてありがとう。 –

+0

ようこそ。 –

12

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

したがって、特定のデータベースのアクセス許可をREVOKEGRANTで明示的に制限しない限り、クラスタ内のすべてのユーザーは、クラスタ内のすべてのデータベースに基本的にアクセスできます。 privilege functions in the manual

has_database_privilege(user, database, privilege) 

詳細:特定ユーザが実際にデータベースの特定の特権( 'CONNECT')を有するかどうかを決定するために、

。具体的な制限が適用されない場合は、dataclためNULLを取得

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

:特定データベースのためのすべての特定の権限を決定するために


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

+0

@アーウィン、@マイケル、助けてくれてありがとう。 –

+2

また、最近のバージョンでは、dbにCONNECT権限を付与/取り消すことができます。 –

3

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

rolnameからpg_rolesを選択してください。