获取正在使用数据库/架构/表的用户列表

时间:2018-07-18 17:11:01

标签: postgresql amazon-redshift psql

在我的项目中有一个用例,我想向用户展示有权访问在postgresql中使用该数据库/模式/表的用户。假设我已经创建了一个数据库雇员。因此,我想列出正在访问此数据库的用户。模式和表相同。我尝试过:

SELECT 
    * 
FROM 
    information_schema.tables 
WHERE 
    table_schema not in ('pg_catalog', 'information_schema') AND 
    table_schema not like 'pg_toast%'

但是它提供了有关当前用户有权访问的信息。我想要访问正在使用该数据库/表/模式/列的用户的列表。

1 个答案:

答案 0 :(得分:0)

您可以使用函数has_table_privilege()来实现所需的功能。

select has_table_privilege('user_name', 'schema.table', 'select');

更多信息here

我想您需要成为超级用户才能获得所有结果。下面显示了具有 特权的所有用户,不一定显示他们是否正在访问表。

现在您可以调整查询以将所有用户与表列表一起加入-

SET search_path TO public,
      schema1;

SELECT *, 
       usename,
       has_table_privilege(usename, table_schema||'.'||table_name, 'select') as has_privilege
FROM SVV_TABLES
JOIN PG_USER
ON 1=1
WHERE table_schema = 'schema1';