psql の特定のデータベース (「template0」など) のユーザーのリストを取得したいと考えています。ユーザーは誰ですか?または「template1」データベースの場合: - そこにいるユーザーは誰ですか?
すでに試しました:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
psql の特定のデータベース (「template0」など) のユーザーのリストを取得したいと考えています。ユーザーは誰ですか?または「template1」データベースの場合: - そこにいるユーザーは誰ですか?
すでに試しました:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
ユーザーは実際には「データベース用」ではなく、クラスター用であり、データベースにアクセスするためのさまざまな権限が与えられています。ユーザーをリストする\du
必要がありますが、接続する必要があります。何かのようなもの
psql template1 -c '\du'
コマンドラインプロンプトから行う必要があります。(または、データベースに接続しているときに\du
psql プロンプトから)。
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
データベース自体がアクセスを許可している場合でも、ユーザーは接続できません。