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