开发者

如何在PostgreSQL中查看有哪些用户和用户权限

目录
  • 方法一:使用 SQL 命令查询系统目录(推荐)
    • 1. 查看所有用户/角色(基本信息)
    • 2. 仅查看具有登录权限的用户(常用)
    • 3. 查看更详细的信息(包括权限、属性等)
  • 方法二:使用元命令(在 psql 命令行工具中)
    • 1. 列出所有角色/用户
    • 2. 列出所有用户(等同于SELECT * FROM pg_user;)
  • 方法三:查看用户属性(如密码有效期、连接限制)
    • 示例输出解读
      • 总结

        在 PostgreSQL 中查看用户(在 PostgreSQL 中,用户和角色是同一个概念,ROLE)主要有以下几种方法。

        方法一:使用 SQL 命令查询系统目录(推荐)

        这是最常用和最灵活的方法。用户信息主要存储在 pg_catalog.pg_roles 系统目录中。

        1. 查看所有用户/角色(基本信息)

        SELECT rolname AS username, 
               rolsuper AS is_superuser,
               rolcanlogin AS can_login,
               rolcreatedb AS can_create_db,
               rolcreaterole AS can_create_roles,
               rolreplication AS can_do_replication
        FROM pg_roles
        ORDER BY rolname;
        

        字段解释:

        • rolname: 用户名。
        • rolsuper: 是否是超级用户(t 表示是,f 表示否)。
        • rolcanlogin: 是js否有登录权限(即能否作为客户端连接数据库)。具有登录权限的角色才通常被称为“用户”
        • rolcreatedb: 是否有创建数据库的权限。
        • rolcreaterole: 是否有创建其他角色的权限。
        • rolreplication: 是否有流复制的权限。

        2. 仅查看具有登录权限的用户(常用)

        我们通常更关心能登录数据库的用户。

        SELECT usename AS username, 
               usesuper AS is_superuser,
               usecreatedb AS can_create_db,
               usecreaterole AS can_create_roles,
               usesysid AS user_id
        FROM pg_user
        ORDER BY usename;
        

        pg_userpg_roles 的一个便于查看的视图,它默认只显示具有登录权限的角色。

        3. 查看更详细的信息(包括权限、属性等)

        SELECT * FROM pg_roles WHERE rolcanlogin = true ORDER BY rolname;
        

        这会列出所有能登录的角色的所有属性,包括账户有效期、连接限制等。

        方法二:使用元命令(在 psql 命令行工具中)

        如果你正在使用 PostgreSQL 的交互式命令行工具 psql,可以使用快捷的元命令(以反斜杠 \ 开头的命令)。

        1. 列出所有角色/用户

        \du
        

        或者更详细的版本:

        \du+
        

        \du\df 用于函数,\dt 用于表一样,是用于用户的元命令。

        2. 列出所有用户(等同于SELECT * FROM pg_user;)

        \dg
        

        在 PostgreSQL 中,\du\dg 是等价的,都可php以用来列出角色。

        方法三:查看用户属性(如密码有效期、连接限制)

        如果你想查看用户更具体的属性配置,可以查询 pg_shadow 系统目录。注意:通常只有超级用户才能查看此视图,因为它包含密码哈希(以md5或SCRAM形式加密存储)。

        SELECT usename编程客栈 AS username,
               passwd AS password_hash, -- 敏感信息,通常以md5或SCRAM开头
               valuntil AS password_expires_at,
               useconfig AS session_defaults
        FROM pg_shadow
        WHERE usename = 'your_username'; -- 可以指定要查看的用户名
        

        字段解释:

        • passwd: 加密后的密码。如果是 ********,则表示密码已被加密,无法直接查看明文。
        • valuntil: 密码失效时间(账户有效期)。
        • useconfig: 该用户会话的默认运行时配置(例如,{search_path=myschema, work_mem=16MB})。

        示例输出解读

        执行 \du 后,你可能会看到如下结果:

                                                  List of roles
         Role name |                         Attributes                         | Member of
        -----------+------------------------------------------------------------+-----------
         admin     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
         app_user  | Create DB                                                  | {readonly_group}
         bob       | Password valid until 2024-12-31                            | {}
         readonly  | Cannot login                                               | {}
        
        • admin: 这是一个超级用户,拥有所有最高权限。
        • app_user: 这是一个普通用户,拥有创建数据库的权限,并且是 readonly_group 角色的成员。
        • bob: 这是一个普通用户,他的密码将在 2024 年底失效。
        • readonly: 这是一个角色Cannot login),不能直接登录,通常被授予其他用户以实现权限分组。

        总结

        你的需求使用的命令(SQL)使用的元命令(psql 中)
        快速查看所有用户及其主要权限SELECT * FROM pg_user;\du\dg
        查看所有角色(包括不能登录的)SELECT rolname, rolcanlogin FROM pg_roles;\du
        查看更详细的角色属性SELECT * FROM pg_roles;\du+
        查看用户的密码和有效期(需超级用户)SELECT * FROM pg_shadow;无直接元命令

        对于日常管理,最常用的是 \du 元命令,因为它简单快捷。在脚本或需要程序化处理时,则使用 SELECT ... FROM pg_roles 或 pg_user 的 SQL 查询方式。

        到此这篇关于如何在PostgreSQL中查看有哪些用户和用户权限的文章就介绍到这了,更多相关PostgreSQL查看用户和用户权限内容请搜索编程客栈(www.devze.com)以前的文php章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.cppcns.coESUUnNkm)!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新数据库

        数据库排行榜