Коли привілеї перераховані в \ l, а коли ні?


11

Коли привілеї доступу перераховані \ l, а коли їх немає? Права доступу, перелічені \ l, можуть змінюватися після надання дозволу та скасування:

$ createuser -EP my_readonly
$ psql development
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
...
development=# grant usage on schema public to my_readonly;
development=# grant connect on database development to my_readonly;
development=# \l
                                             List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges      
-----------------------------+----------+----------+-------------+-------------+----------------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant               +
                             |          |          |             |             | vagrant=CTc/vagrant       +
                             |          |          |             |             | my_readonly=c/vagrant
...
development=# revoke connect on database development from my_readonly;
REVOKE
development=# revoke usage on schema public from my_readonly;
REVOKE
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant          +
                             |          |          |             |             | vagrant=CTc/vagrant

Чому так? Який стан змінився? Я вважаю, що здатність користувача my_readonly підключатися була незмінною протягом усього сеансу psql (тому що я здогадуюсь, що роль PUBLIC має привілеї підключення), але явно щось змінилося: що це?

Бічний питання: як я можу явно задати Postgres чи PUBLIC насправді це має привілеї CONNECT (вони можуть бути відкликані - см Чому новий користувач може вибрати з будь-якої таблиці? )?

Відповіді:


5

Команди зворотної косої риски в psql - це ярлики для запиту або запитів, які проглядаються через системні каталоги. \lКоманда дивиться на інформацію в pg_catalog.pg_database, в зокрема, цей запит:

SELECT d.datname as "Name",
   pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
   pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
   d.datcollate as "Collate",
   d.datctype as "Ctype",
   pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;

Ви можете змусити psqlпоказати, що він використовує для команд зворотної косої риси, передавши -Eпрапор до нього, коли ви викликаєте його в командному рядку.

Якщо дозволи в базі даних або іншому об'єкті є типовими параметрами, за допомогою яких PostgreSQL створює їх, *aclстовпець буде NULL. Якщо ви зміните за замовчуванням, як у вас є, стовпець ACL буде заповнений інформацією, що стосується GRANTта / або REVOKEзаяв, які ви запустили.

Ви можете бачити дозволи / ACL, зокрема, через \zабо\dp

Якщо ви читаєте далі тут:

http://www.postgresql.org/docs/9.4/static/sql-grant.html

Якщо ви прокрутите вниз (або шукаєте слово psql), ви можете переглянути таблицю, яка показує, як інтерпретувати ACL, які ви бачите з \lабо в стовпці ACL.

Наприклад:

=Tc/vagrant

означає, що PUBLIC (неявна роль, яка містить усі ролі) має дозволи на створення тимчасових таблиць Tта підключення c, оскільки рядок ACL =xxxxxпозначає дозволи, застосовані до PUBLIC, а rolname=xxxxзастосовується до цієї конкретної ролі.

Ця презентація від Dalibo також повинна допомогти уточнити це далі: Управління правами в PostgreSQL

Сподіваюся, що це допомагає. =)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.