Подтвердить что ты не робот

PostgreSQL: просмотр разрешений на подключение к базе данных

Как вы просматриваете пользователей, которые были выпущены GRANT CONNECT ON DATABASE <database> TO <user>?

  • \dp - списки разрешений для таблиц/представлений
  • \dn + - списки разрешений схемы
  • \l + не перечисляет всех пользователей, которые могут обращаться к базе данных
4b9b3361

Ответ 1

Немного странно, если команда \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

Ответ 2

Я использую psql из postgres 8.4 и postgres 9.0, а команда \l или \l+ дает мне столбец Access Privileges, где у меня есть запись:

<user_name>=c/<database_name>

и ранее я дал пользователю привилегию подключения, как вы хотели.

Как указано на странице http://www.postgresql.org/docs/9.0/static/sql-grant.html, здесь c означает Connect.