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

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

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

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

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 будет отображаться на панели свойств в правом верхнем углу.

Другие вопросы по тегам