PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Разберете дали потребителят е получил разрешение да избере/актуализира/... таблица/функция/... в PostgreSQL

Открих, че по-добър подход (и изглежда си спомням, че това беше взето от някои заявки, вградени в psql, или може би изгледите на information_schema) е да се използва has_*_privilege функции и просто ги приложете към набор от всички възможни комбинации от потребител и обект. Това ще вземе предвид и достъпа до обект чрез някаква групова роля.

Например, това ще покаже кои потребители какъв достъп имат до некаталожни таблици и изгледи:

select usename, nspname || '.' || relname as relation,
       case relkind when 'r' then 'TABLE' when 'v' then 'VIEW' end as relation_type,
       priv
from pg_class join pg_namespace on pg_namespace.oid = pg_class.relnamespace,
     pg_user,
     (values('SELECT', 1),('INSERT', 2),('UPDATE', 3),('DELETE', 4)) privs(priv, privorder)
where relkind in ('r', 'v')
      and has_table_privilege(pg_user.usesysid, pg_class.oid, priv)
      and not (nspname ~ '^pg_' or nspname = 'information_schema')
order by 2, 1, 3, privorder;

Възможните привилегии са описани подробно в описанието на has_*_privilege функции на http://www .postgresql.org/docs/current/static/functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE .

„CREATE TEMP“ е привилегия на ниво база данни:тя позволява на потребителя да използва pg_temp_* схема. Може да се тества с has_database_privilege(useroid, datoid, 'TEMP') .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Продължете транзакцията на Postgres с изключения в Java

  2. Забавяне на репликация - превишава max_slot_wal_keep_size, WAL сегментите не са премахнати

  3. Невалиден брой и сума в кръстосана заявка с помощта на PostgreSQL

  4. django получава месец от датата за агрегиране

  5. Не е избрана схема за създаване в ... грешка