Какой запрос или представление PostgreSQL может определить, кто устанавливает разрешения для пользователей?

Я пытаюсь отозвать разрешения пользователя базы данных, и кажется, что разрешения могут быть отозваны только пользователем, который их предоставил. Здесь есть ветка с обсуждением проблемы. http://archives.postgresql.org/pgsql-bugs/2007-05/msg00234.php

Тема восходит к 2007 году, и я не совсем уверен, рассматривается ли она как ошибка и присутствует ли эта проблема в PostgreSQL 8.4, который я использую.

Есть ли запрос или представление, которое может отображать эту информацию? Таким образом, я могу использовать set session authorization и отозвать его.


person vfclists    schedule 23.06.2012    source источник


Ответы (1)


PostgreSQL 8.4 устарел. Подробности см. в политике управления версиями. Но поскольку это стандартное поведение SQL (как утверждает Том Лейн в предоставленном вами связанном обсуждении), оно вряд ли изменилось.

Привилегии хранятся в системном каталоге с соответствующим объектом. Например, для таблицы:

SELECT n.nspname, c.relname, c.relacl
FROM   pg_catalog.pg_class c
JOIN   pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE  c.oid = 'myschema.mytbl'::regclass  -- your tablename here

Будет производить что-то вроде:

 nspname  | relname |                  relacl
----------+---------+---------------------------------------------
 myschema | mytbl   | {postgres=arwdDxt/postgres,fuser=r/fadmin}

Имя роли после косой черты — лицо, предоставившее право. Чтобы отозвать, как пользователь fadmin (или любой суперпользователь):

REVOKE SELECT ON TABLE myschema.mytbl FROM fuser;

Подобные столбцы *acl есть и в других системных таблицах. pg_namespace для схем и т. д. См. список системных таблиц в руководстве.


Проще всего использовать pgAdmin и выбрать объект в браузере объектов слева. ACL будет отображаться на панели свойств вверху справа.

person Erwin Brandstetter    schedule 24.06.2012