我正在进行数据库服务器迁移,但我不知道(在此处进行谷歌搜索和搜索之后)如何使用psql
命令行工具列出 PostgreSQL 上的数据库权限(或服务器上的所有权限)?
我在 Ubuntu 11.04 上,我的 PostgreSQL 版本是 8.2.x。
我正在进行数据库服务器迁移,但我不知道(在此处进行谷歌搜索和搜索之后)如何使用psql
命令行工具列出 PostgreSQL 上的数据库权限(或服务器上的所有权限)?
我在 Ubuntu 11.04 上,我的 PostgreSQL 版本是 8.2.x。
Privileges 上的文档解释了如何解释输出。对于当前数据库表的特定权限,请使用
\z myTable
.也许您的意思是列出用户及其对数据库的权限-我无法从问题中完全看出:
您可以通过以下方式做到这一点:
这为您提供了这种输出:
使用
psql
元命令:https://www.postgresql.org/docs/current/static/app-psql.html
使用 Ctrl+F 浏览页面给出:
上面也提到过,但在手册页上找不到“特权”一词:
\du+
对于具有登录名\dg+
的角色和没有登录的角色 - 将有一个字段"Member of"
,您可以在其中找到授予角色的角色。我故意在这里跳过功能和语言特权,在
psql
手册中发现几乎没有被操纵(如果你确实使用了这些特权,你就不会来这里寻求建议)。对于用户定义的类型、域等也是如此 - 如果适用,在元命令后使用“+”将向您显示权限。检查权限的一种极端方法是将用户放入事务中,例如:
当列表长于 N 时(至少在 9.3 中),带有权限列表的警告被折叠,但您仍然可以在日志中找到它...
Undercovers psql 在您发出
\du
命令时使用波纹管查询。这是您可以列出角色(被授予者)的所有权限的方式:
将导致:
在 PG 10 中工作
一个(可能很明显)附加步骤是成为 postgres 用户,否则您可能会收到有关角色不存在的错误。
或者
这是我对这个问题的多个答案组成的查询:
这会导致这样的结果:
您可以通过以下方式输入:
你会得到
可能这里你会觉得角色太多了,而这一次,你可以使用 WHERE 来选择你想看的角色
其实也可以直接输入
您将看到您创建的所有角色而不是默认角色
列出数据库所有者
文档:pg_database和pg_roles
相关:测试特定权限:
文档:has_database_privilege(通过)