本文共 869 字,大约阅读时间需要 2 分钟。
PostgreSQL 14中新增了pg_database_owner角色,这个角色表示数据库的拥有者。这个角色有一个显著的特点:它无法被赋予,也无法显示赋予。因此,这个角色必须直接附加到数据库的所有者身上,这样每个新创建的数据库所有者都会继承这些权限。
在PostgreSQL 14中,系统内部定义了11种特殊角色,包括pg_database_owner以及其他与数据库管理相关的角色。这些角色中的每一个都有特定的权限,例如管理数据库、查看统计信息、监控后台进程等。这些角色通常用于内部管理,但也有时机可以用于特定权限的管理。
举个例子,假设你执行以下命令:
bill@bill> SELECT pg_has_role('bill', 'pg_database_owner', 'USAGE') as priv,billing: pg_has_role('bill', 'pg_database_owner', 'MEMBER') as mem,billing: pg_has_role('bill', 'pg_database_owner', 'MEMBER WITH ADMIN OPTION') as admin;
将返回结果是:
priv | mem | admin-----+-----+---------t | t | t(1 row)
这意味着用户bill同时拥有使用权限、成员权限以及管理员权限。这些权限是预定义的,默认附加给所有数据库拥有者,而无需通过更改角色成员的方式来赋予。这种设计目的是为了确保Database Owner的权利不会被意外地丢失或被修改。
值得注意的是,虽然pg_database_owner角色是默认存在的,但它并不支持通过GRANT或类似的命令进行赋予。这意味着,你无法通过普通的SQL语句将这个角色赋予给其他用户。这也是为什么当数据库被创建时,Database Owner的权限会自动继承这些预定义角色。
如果你对这段内容感兴趣,可以参考PostgreSQL官方文档获取更详细的信息。
转载地址:http://jtcaz.baihongyu.com/