如何查看已发出的用户GRANT CONNECT ON DATABASE <database> TO <user>
?PostgreSQL:查看数据库连接权限
- \ DP - 列出表/视图的权限
- \ DN + - 列出架构权限
- \ L +不会列出可以访问数据库
如何查看已发出的用户GRANT CONNECT ON DATABASE <database> TO <user>
?PostgreSQL:查看数据库连接权限
我使用psql的所有用户8.4 Postgres的和Postgres 9.0,并且命令\l
或\l+
给我列Access Privileges
在那里我有条目:
<user_name>=c/<database_name>
和更早的版本,我给了用户连接权限,只要你想。
正如页面http://www.postgresql.org/docs/9.0/static/sql-grant.html所述,这里的c
字母表示Connect
。
没错,但没有列出所有的用户。我认为这可能是一个限制。或者,也许pg_hba.conf首先要做的事情。 – vol7ron 2011-04-19 22:09:17
如果\ l +命令仅显示一些具有连接到数据库的权限/用户权限的用户,有点奇怪。我无法在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
忽略用户意味着PUBLIC被授予特权,即所有角色。例如,如果特权为=Tc/postgres
,则所有角色都可以在该特定数据库中连接并创建临时表,并且该用户授予该特权。
PostgreSQL站点有一个简介,解释PostgreSQL站点http://www.postgresql.org/docs/9.2/static/sql-grant.html的不同特权。
rolename=xxxx -- privileges granted to a role
=xxxx -- privileges granted to PUBLIC
r -- SELECT ("read")
w -- UPDATE ("write")
a -- INSERT ("append")
d -- DELETE
D -- TRUNCATE
x -- REFERENCES
t -- TRIGGER
X -- EXECUTE
U -- USAGE
C -- CREATE
c -- CONNECT
T -- TEMPORARY
arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects)
* -- grant option for preceding privilege
/yyyy -- role that granted this privilege
约翰,我会研究这个。我相信我也正在测试8.4版本。我想我可以查询它,但我希望能有一个快捷命令来做到这一点。无论如何,我将不得不看看我是否记得引起我注意的独特情况。 – vol7ron 2011-06-26 18:38:28
自从我看到这个问题以来已经有一段时间了。 8.4和否,我知道有一些帐户可以访问数据库,但没有在列表中显示......除非......问题:当'= Tc/
是的。顺便问一下,我已经更新了解释权限的答案。 – 2012-10-01 04:50:07
哇这个问题是旧的,它似乎我从来没有选择一个答案。我想那是因为当时我正在寻找更多的东西。我有一段时间没有看到这个,所以我很抱歉,如果这是错误的。我在猜测,pg_hba.conf文件允许用户连接到服务器,而不需要显式授予。因此,没有被锁定的数据库将能被虚拟允许的任何人访问,而'\ l'命令可能永远无法知道。 – vol7ron 2016-05-04 04:04:05