PostgreSQL: просмотр разрешений на подключение к базе данных - PullRequest
19 голосов
/ 19 апреля 2011

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

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

Ответы [ 2 ]

19 голосов
/ 03 июня 2011

Немного странно, если команда \ 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
0 голосов
/ 20 апреля 2011

Я использую 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...