postgresql - 获取正在使用数据库/模式/表的用户列表
问题描述
在我的项目中有一个用例,我想向用户展示有权在 postgresql 中使用该数据库/模式/表的用户。假设我创建了一个数据库员工。所以我想列出正在访问这个数据库的用户。架构和表相同。我试过这个:
SELECT
*
FROM
information_schema.tables
WHERE
table_schema not in ('pg_catalog', 'information_schema') AND
table_schema not like 'pg_toast%'
但它提供了有关当前用户可以访问的信息。我想要访问正在使用该数据库/表/模式/列的用户的列表。
解决方案
您可以使用该功能has_table_privilege()
来实现您想要的。
select has_table_privilege('user_name', 'schema.table', 'select');
更多信息在这里。
我想您需要成为超级用户才能获得所有结果。下面显示了所有具有权限的用户,不一定是他们是否正在访问这些表。
现在您可以调整查询以将所有用户加入到表列表中 -
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';
推荐阅读
- javascript - 有没有办法从节点红色转移到纯代码?
- jquery - 在 Nuget 管理器中安装 jQuery 后未定义“jQuery”
- julia - 重载已被导入模块使用的函数名称
- asp.net-web-api - 如何在 db first 方法的现有 mvc 项目中添加身份框架
- node.js - 来自 forEach 函数的多个承诺
- r - curl::curl_fetch_memory(url, handle = handle) 中的错误:操作被 RStudio 中的应用程序中止
- sql - 如何在 SQL 的单列中合并三个差异列
- javascript - 文档上的 document.click()
- android - Android 在 Recycler View 的 Grid Layout Manager 项目之间显示全跨度动态视图?
- css - Angular 反应形式:无法使用 ngClass