了解 rds_superuser 角色
在 PostgreSQL 中,角色可以针对数据库中的各种对象定义一个用户、一个组或一组授予组或用户的特定权限。PostgreSQL 命令 CREATE USER
和 CREATE GROUP
已替换为更通用的 CREATE ROLE
,并使用特定属性来区分数据库用户。数据库用户可以被视为具有 LOGIN 权限的角色。
注意
仍然可以使用 CREATE USER
和 CREATE GROUP
命令。有关更多信息,请参阅 PostgreSQL 文档中的数据库角色
postgres
用户是您的 Aurora PostgreSQL 数据库集群 上权限最高的数据库用户。它具有以下 CREATE ROLE
语句所定义的特征。
CREATE ROLE postgres WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION VALID UNTIL 'infinity'
属性 NOSUPERUSER
、NOREPLICATION
、INHERIT
和 VALID UNTIL 'infinity'
是 CREATE ROLE 的默认选项,除非另有说明。
原定设置情况下,postgres
拥有授予 rds_superuser
角色的权限以及创建角色和数据库的权限。rds_superuser
角色允许 postgres
用户执行以下操作:
添加可用于 Aurora PostgreSQL。有关更多信息,请参阅使用扩展和外部数据包装器。
-
为用户创建角色并向用户授予权限。有关更多信息,请参阅 PostgreSQL 文档中的 CREATE ROLE
和 GRANT 。 -
创建数据库。有关更多信息,请参阅 PostgreSQL 文档中的 CREATE DATABASE
。 将
rds_superuser
权限授予没有这些权限的用户角色,并根据需要撤销权限。我们建议您仅向执行超级用户任务的那些用户授予此角色。换句话说,您可以将此角色授予数据库管理员 (DBA) 或系统管理员。向没有
rds_superuser
角色的数据库用户授予(和撤销)rds_replication
角色。向没有
rds_superuser
角色的数据库用户授予(和撤销)rds_password
角色。通过使用
pg_stat_activity
视图获取有关所有数据库连接的状态信息。需要时,rds_superuser
可以通过使用pg_terminate_backend
或pg_cancel_backend
停止任何连接。
在 CREATE ROLE postgres...
语句中,您可以看到 postgres
用户角色明确禁止 PostgreSQL superuser
权限。Aurora PostgreSQL 是一项托管服务,因此您无法访问主机操作系统,也无法使用 PostgreSQL superuser
账户进行连接。许多需要独立 PostgreSQL 上的 superuser
访问权限的任务都由 Aurora 自动管理。
有关授权权限的更多信息,请参阅 PostgreSQL 文档中的 GRANT
rds_superuser
角色是 Aurora PostgreSQL 数据库集群中的几个预定义角色之一。
注意
在 PostgreSQL 13 和更早版本中,预定义角色称为默认角色。
在下面的列表中,您可以找到为新 Aurora PostgreSQL 数据库集群自动创建的一些其他预定义角色。无法更改预定义角色及其权限。无法删除、重命名或修改这些预定义角色的权限。此类尝试会导致错误。
rds_password – 可以为数据库用户更改密码和设置密码限制的角色。默认情况下,
rds_superuser
角色被授予此角色,并且可以将此角色授予数据库用户。有关更多信息,请参阅 控制用户对 PostgreSQL 数据库的访问。对于早于 14 的 RDS for PostgreSQL 版本,
rds_password
角色可以为数据库用户和具有rds_superuser
角色的用户更改密码和设置密码限制。在 RDS for PostgreSQL 14 及更高版本中,rds_password
角色只能为数据库用户更改密码和设置密码限制。只有具有rds_superuser
角色的用户才能对具有rds_superuser
角色的其他用户执行这些操作。
rdsadmin – 具有
superuser
权限的管理员将对独立的 PostgreSQL 数据库执行许多管理任务,此角色专为处理这些管理任务而创建。此角色由 Aurora PostgreSQL 在内部用于许多管理任务。
要查看所有预定义角色,您可以连接到 Aurora PostgreSQL 数据库集群的主实例,并使用 psql \du
元命令。输出如下所示:
List of roles
Role name | Attributes | Member of
--------------+-----------------------------------+------------------------------------
postgres | Create role, Create DB +| {rds_superuser}
| Password valid until infinity |
rds_superuser | Cannot login | {pg_monitor,pg_signal_backend,
| +| rds_replication,rds_password}
...
在输出中,您可以看到 rds_superuser
不是数据库用户角色(无法登录),但它具有许多其他角色的权限。您还可以看到数据库用户 postgres
是 rds_superuser
角色的成员。如前所述,postgres
是 Amazon RDS 控制台的 Create database(创建数据库)页面中的默认值。如果您选择了另一个名称,则该名称将显示在角色列表中。
注意
Aurora PostgreSQL 版本 15.2 和 14.7 引入了 rds_superuser
角色的限制行为。Aurora PostgreSQL 用户需要在相应的数据库上获得 CONNECT
权限才能连接,即使向该用户授予了 rds_superuser
角色也是如此。在 Aurora PostgreSQL 版本 14.7 和 15.2 之前,如果向用户授予了 rds_superuser
角色,则用户可以连接到任何数据库和系统表。这种限制行为符合 AWS 的要求和 Amazon Aurora 对持续改善安全性的承诺。
如果上述增强功能有影响,请更新应用程序中的相应逻辑。