2011-04-19 150 views
17

如何查看已发出的用户GRANT CONNECT ON DATABASE <database> TO <user>PostgreSQL:查看数据库连接权限

  • \ DP - 列出表/视图的权限
  • \ DN + - 列出架构权限
  • \ L +不会列出可以访问数据库
+0

哇这个问题是旧的,它似乎我从来没有选择一个答案。我想那是因为当时我正在寻找更多的东西。我有一段时间没有看到这个,所以我很抱歉,如果这是错误的。我在猜测,pg_hba.conf文件允许用户连接到服务器,而不需要显式授予。因此,没有被锁定的数据库将能被虚拟允许的任何人访问,而'\ l'命令可能永远无法知道。 – vol7ron 2016-05-04 04:04:05

回答

0

我使用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

+0

没错,但没有列出所有的用户。我认为这可能是一个限制。或者,也许pg_hba.conf首先要做的事情。 – vol7ron 2011-04-19 22:09:17

18

如果\ 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 
+0

约翰,我会研究这个。我相信我也正在测试8.4版本。我想我可以查询它,但我希望能有一个快捷命令来做到这一点。无论如何,我将不得不看看我是否记得引起我注意的独特情况。 – vol7ron 2011-06-26 18:38:28

+0

自从我看到这个问题以来已经有一段时间了。 8.4和否,我知道有一些帐户可以访问数据库,但没有在列表中显示......除非......问题:当'= Tc/'中的等号之前没有用户列出时,这意味着什么?这是否意味着任何人都有临时连接? – vol7ron 2012-04-02 18:54:33

+0

是的。顺便问一下,我已经更新了解释权限的答案。 – 2012-10-01 04:50:07