检查用户的 Postgres 访问权限

我已经查看了 GRANT Found 给你的文档,我想看看是否有一个内置函数,可以让我看看我在数据库中具有什么级别的可访问性。当然有:

\dp\dp mytablename

但这并没有显示我的账户访问了什么。我想看到所有的表,我可以访问。谁能告诉我是否有一个命令,可以检查我的水平访问 Postgres (是否我有 SELECTINSERTDELETEUPDATE特权) ?如果是这样,命令是什么?

136543 次浏览

您可以在信息模式中查询 table_privileges表:

SELECT table_catalog, table_schema, table_name, privilege_type
FROM   information_schema.table_privileges
WHERE  grantee = 'MY_USER'

对于特定数据库上的所有用户,请执行以下操作:

# psql
\c your_database
select grantee, table_catalog, privilege_type, table_schema, table_name from information_schema.table_privileges order by grantee, table_schema, table_name;

也可以使用这个来列出受让人,并删除 Postgres PaaS Azure 的(PG _ monitor 和 Public)。

SELECT grantee,table_catalog, table_schema, table_name, privilege_type
FROM   information_schema.table_privileges
WHERE  grantee not in ('pg_monitor','PUBLIC');