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

Как мога да прегледам всички предоставени бази данни и обекти за роля?

Колоната relacl на системния каталог pg_class съдържа цялата информация за привилегиите.

Примерни данни в схема public собственост на postgres с разрешения за newuser :

create table test(id int);
create view test_view as select * from test;

grant select, insert, update on test to newuser;
grant select on test_view to newuser;

Запитване до pg_class :

select 
    relname, 
    relkind, 
    coalesce(nullif(s[1], ''), 'public') as grantee, 
    s[2] as privileges
from 
    pg_class c
    join pg_namespace n on n.oid = relnamespace
    join pg_roles r on r.oid = relowner,
    unnest(coalesce(relacl::text[], format('{%s=arwdDxt/%s}', rolname, rolname)::text[])) acl, 
    regexp_split_to_array(acl, '=|/') s
where nspname = 'public'
and relname like 'test%';

  relname  | relkind | grantee  | privileges 
-----------+---------+----------+------------
 test      | r       | postgres | arwdDxt      <- owner postgres has all privileges on the table
 test      | r       | newuser  | arw          <- newuser has append/read/write privileges
 test_view | v       | postgres | arwdDxt      <- owner postgres has all privileges on the view
 test_view | v       | newuser  | r            <- newuser has read privilege
(4 rows)

Коментари:

  • coalesce(relacl::text[], format('{%s=arwdDxt/%s}', rolname, rolname)) - Нула в relacl означава, че собственикът има всички привилегии;
  • unnest(...) acl - relacl е масив от aclitem , един елемент от масив за потребител;
  • regexp_split_to_array(acl, '=|/') s - разделяне на aclitem в:s[1] потребителско име, s[2] привилегии;
  • coalesce(nullif(s[1], ''), 'public') as grantee - празното потребителско име означава public .

Променете заявката, за да изберете отделен потребител или конкретен вид връзка или други схеми и т.н...

Прочетете в документацията:

По подобен начин можете да получите информация за привилегиите, предоставени на схеми (колоната nspacl в pg_namespace ) и бази данни (datacl в pg_database )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO bindColumn и PDO::FETCH_BOUND -- задължителни или незадължителни?

  2. AsyncQuery с postgresql и dapper с помощта на npqsql

  3. Грешка в PostgreSQL:Фатално:потребителското име на ролята не съществува

  4. Как да конфигурирам Postgresql с проект за релси?

  5. как да изчислим салда в счетоводен софтуер с помощта на функцията прозорец postgres