PostgreSQL:查看数据库连接权限

PostgreSQL:查看数据库连接权限,postgresql,Postgresql,您如何查看已发布的用户,将数据库上的连接授予 \dp-列出表/视图权限 \dn+-列出架构权限 \l+不会列出所有可以访问数据库的用户 我正在使用postgres 8.4和postgres 9.0中的psql,命令\l或\l+为我提供了列访问权限,其中我有条目: <user_name>=c/<database_name> =c/ 早些时候,我给了用户你想要的连接权限 如页面上所述,如果\l+命令仅显示一些具有连接数据库权限/特权的用户,则此处的c字母表示Connec

您如何查看已发布的用户,将数据库上的连接授予

  • \dp-列出表/视图权限
  • \dn+-列出架构权限
  • \l+不会列出所有可以访问数据库的用户

我正在使用postgres 8.4和postgres 9.0中的psql,命令
\l
\l+
为我提供了列
访问权限,其中我有条目:

<user_name>=c/<database_name>
=c/
早些时候,我给了用户你想要的连接权限


如页面上所述,如果\l+命令仅显示一些具有连接数据库权限/特权的用户,则此处的
c
字母表示
Connect

有点奇怪。我不能在PostgreSQL 8.4安装(Ubuntu 10.04 LTS)上重复这一点。你用的是什么版本

无论如何,您可以检查保存该特定数据库ACL的表,并由此推断用户是否具有正确的权限:

SELECT datname as "Relation", datacl as "Access permissions" FROM pg_database WHERE datname = 'databasename';
如果您只想检查一个用户,可以执行以下操作:

SELECT * FROM has_database_privilege('username', 'database', 'connect');
user = privileges / granted by 
如何解释访问的权限/特权?特权如下所示:

SELECT * FROM has_database_privilege('username', 'database', 'connect');
user = privileges / granted by 
省略user意味着PUBLIC被授予特权,即所有角色。例如,如果权限为
=Tc/postgres
,则所有角色都可以连接并在该特定数据库中创建临时表,而授予该权限的是
postgres
用户

PostgreSQL站点上有一个简要说明,解释了不同的权限:


是的,但它并没有列出所有的用户。我想这可能是个限制。或者可能pg_hba.conf先做了些什么。John,我来调查一下。我相信我也在测试8.4版本。我想我可能可以查询它,但我希望有一个快捷命令来执行它。不管怎样,我得看看我是否还记得引起我注意的独特案例。我已经有一段时间没有看到这个问题了。8.4和否,我知道有一些帐户可以访问列表中未显示的数据库…除非。。。问题:当在
=Tc/
中等号之前没有列出任何用户时,这意味着什么?这是否意味着任何人都有临时连接?是的。顺便提一下,好问题,我已经更新了如何解释特权的答案。我将不得不重新讨论我注意到的问题。IIRC我希望看到那些被明确授予连接特定数据库能力的用户。这不容易找到。我必须再次检查,但我认为如果你是一个数据库的用户,你可以连接到同一个postgres服务器上的另一个数据库。接受答案或者自己回答@vol7ron怎么样?哇,这个问题很老了,我似乎从来没有选择过答案。我想那是因为当时我在寻找更多的东西。我已经有一段时间没有对此进行调查了,如果这是错误的,我道歉。我猜pg_hba.conf文件允许用户连接到服务器,而无需强制执行显式授权。因此,未被锁定的数据库将能够被任何实际允许进入的人访问,
\l
命令可能永远无法知道这一点。