您如何查看已获得GRANT CONNECT ON DATABASE <database> TO <user>
的用户
发布于 2011-06-03 14:24:30
如果\l+命令只显示一些有权限/特权连接到数据库的用户,那就有点奇怪了。我不能在PostgreSQL 8.4安装(Ubuntu10.04LTS)上重复这一点。您使用的是什么版本?
无论如何,也许您可以检查包含该特定数据库的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
省略user意味着PUBLIC被授予特权,即所有角色。例如,如果权限是=Tc/postgres
,那么所有角色都可以连接并在该特定数据库中创建临时表,而授予该权限的是postgres
用户。
在PostgreSQL站点上有一个概要,解释了不同的特权:https://www.postgresql.org/docs/current/ddl-priv.html#PRIVILEGE-ABBREVS-TABLE。
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
发布于 2011-04-20 05:59:41
我使用的是Postgres8.4和Postgres9.0中的psql,命令\l
或\l+
给出了列Access Privileges
,其中包含以下条目:
<user_name>=c/<database_name>
早些时候,我按照您的要求给了用户connect权限。
正如http://www.postgresql.org/docs/9.0/static/sql-grant.html页面上所述,这里的c
字母表示Connect
。
https://stackoverflow.com/questions/5717611
复制相似问题