Коя заявка или изглед на 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