PostgreSQL:查看数据库连接权限

vol*_*ron 20 postgresql

您如何查看已发布的用户GRANT CONNECT ON DATABASE <database> TO <user>

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

Joh*_*n P 20

如果\ l +命令只显示一些具有连接数据库权限/特权的用户,则有点奇怪.我不能在PostgreSQL 8.4安装(Ubuntu 10.04 LTS)上重复这一点.你用的是什么版本?

无论如何,也许您可​​以检查持有该特定数据库的ACL的表,并从中推断用户是否具有正确的权限:

SELECT datname as "Relation", datacl as "Access permissions" FROM pg_database WHERE datname = 'databasename';
Run Code Online (Sandbox Code Playgroud)

如果您只想检查一个用户,您可以执行以下操作:

SELECT * FROM has_database_privilege('username', 'database', 'connect');
Run Code Online (Sandbox Code Playgroud)

如何解释权限/特权?权限应如下所示:

user = privileges / granted by 
Run Code Online (Sandbox Code Playgroud)

省略用户意味着PUBLIC被授予特权,即所有角色.例如,如果特权是,=Tc/postgres那么所有角色都可以连接并在该特定数据库中创建临时表,并且是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
Run Code Online (Sandbox Code Playgroud)


Szy*_*ski 0

我正在使用 postgres 8.4 和 postgres 9.0 中的 psql,命令\lor为我提供了我可以输入的\l+列:Access Privileges

<user_name>=c/<database_name>
Run Code Online (Sandbox Code Playgroud)

早些时候,我根据需要向用户授予了连接权限。

正如页面http://www.postgresql.org/docs/9.0/static/sql-grant.html上所述,c这里的字母表示Connect.