Немного странно, если команда \ l + просто отображает некоторых пользователей, которые имеют разрешение / привилегию для подключения к базе данных. Я не мог повторить это на установке PostgreSQL 8.4 (Ubuntu 10.04 LTS). Какую версию вы используете?
В любом случае, возможно, вы могли бы проверить таблицу, содержащую ACL для этой конкретной базы данных, и на основании этого сделать вывод, имеет ли пользователь правильные привилегии или нет:
SELECT datname as "Relation", datacl as "Access permissions" FROM pg_database WHERE datname = 'databasename';
Если вы просто хотите проверить одного пользователя, вы можете сделать что-то вроде этого:
SELECT * FROM has_database_privilege('username', 'database', 'connect');
Как интерпретируются разрешения / привилегии? Привилегии читаются так:
user = privileges / granted by
Пропуск пользователя означает, что PUBLIC предоставлена привилегия, то есть все роли. Например, если привилегия =Tc/postgres
, то все роли могут подключаться и создавать временные таблицы в этой конкретной базе данных, и именно пользователь postgres
предоставил привилегию.
На сайте PostgreSQL есть краткий обзор, объясняющий различные привилегии на сайте PostgreSQL http://www.postgresql.org/docs/9.2/static/sql-grant.html.
rolename=xxxx -- privileges granted to a role
=xxxx -- privileges granted to PUBLIC
r -- SELECT ("read")
w -- UPDATE ("write")
a -- INSERT ("append")
d -- DELETE
D -- TRUNCATE
x -- REFERENCES
t -- TRIGGER
X -- EXECUTE
U -- USAGE
C -- CREATE
c -- CONNECT
T -- TEMPORARY
arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects)
* -- grant option for preceding privilege
/yyyy -- role that granted this privilege