psqlで特定のデータベースのユーザのリストを取得したいとします。たとえば "template0"です。ユーザーは誰ですか?または、「template1」データベース: - そこにいるユーザは誰ですか?すでに試したPostgreSQLのユーザリスト
:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
psqlで特定のデータベースのユーザのリストを取得したいとします。たとえば "template0"です。ユーザーは誰ですか?または、「template1」データベース: - そこにいるユーザは誰ですか?すでに試したPostgreSQLのユーザリスト
:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
ユーザーは、彼らがクラスタのためだとデータベースにアクセスするための異なる権限を与えられている、「データベースのために」、実際にはありません。ユーザーリストを表示するには、\du
が必要ですが、接続する必要があります。何かのように
psql template1 -c '\du'
コマンドラインプロンプトから行う必要があります。 (データベースに接続している場合は、psqlプロンプトの\du
)。
PostgreSQLユーザでは、データベースクラスタあたりであることを理解する必要があります。 @Michaelはすでにそれらのリストを取得する方法を示しています。
したがって、特定のデータベースのアクセス許可をREVOKE
とGRANT
で明示的に制限しない限り、クラスタ内のすべてのユーザーは、クラスタ内のすべてのデータベースに基本的にアクセスできます。 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
がデータベース自体にアクセスを許可したとしても、ユーザーはそれを許可しない場合でも、接続することはできません。
@アーウィン、@マイケル、助けてくれてありがとう。 –
また、最近のバージョンでは、dbにCONNECT権限を付与/取り消すことができます。 –
ロール/ユーザを一覧表示するには
rolnameからpg_rolesを選択してください。
@マイケル、助けてくれてありがとう。 –
ようこそ。 –