2012-01-19 2 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

@ Michael, 도움에 감사드립니다. –

+0

당신을 진심으로 환영합니다. –

12

PostgreSQL 사용자는 데이터베이스 클러스터 당 임을 이해해야합니다. @ 마이클은 이미 그 목록을 얻는 방법을 보여줍니다.

따라서 특정 데이터베이스에 대한 사용 권한을 명시 적으로 REVOKEGRANT으로 제한하지 않으면 클러스터의 모든 사용자가 클러스터의 모든 데이터베이스에 대한 기본 액세스 권한을 갖습니다.

특정 사용자 실제로 데이터베이스에 대한 특정 권한 ('CONNECT')를 가지고 있는지 확인하려면 : privilege functions in the manual에 대한

has_database_privilege(user, database, privilege) 

더.

특정 데이터베이스에 대한 모든 특정 권한을 확인하려면 다음

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

특별한 제한이 적용되지 않는 경우가 datacl에 대한 NULL를 얻을.


이외에도 pg_hba.conf 파일에서 데이터베이스 및 사용자별로 액세스를 제한 할 수 있습니다. 그게 더 낮은 수준입니다. pg_hba.conf이 데이터베이스 자체에 액세스를 허용하더라도 사용자가 연결하지 못하면 사용자도 연결할 수 없습니다.

+0

@ Erwin, @ Michael, 도움에 감사드립니다. –

+2

또한 최신 버전에서는 db에 CONNECT 권한을 부여/취소 할 수 있습니다. –

3

나열하려면 역할/사용자

pg_roles에서

선택 rolname;