了解 rds_superuser 角色 - Amazon Relational Database Service

了解 rds_superuser 角色

在 PostgreSQL 中,角色可以针对数据库中的各种对象定义一个用户、一个组或一组授予组或用户的特定权限。PostgreSQL 命令 CREATE USERCREATE GROUP 已替换为更通用的 CREATE ROLE,并使用特定属性来区分数据库用户。数据库用户可以被视为具有 LOGIN 权限的角色。

注意

仍然可以使用 CREATE USERCREATE GROUP 命令。有关更多信息,请参阅 PostgreSQL 文档中的数据库角色

postgres 用户是您的 RDS for PostgreSQL 数据库实例上权限最高的数据库用户。它具有以下 CREATE ROLE 语句所定义的特征。

CREATE ROLE postgres WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION VALID UNTIL 'infinity'

属性 NOSUPERUSERNOREPLICATIONINHERITVALID UNTIL 'infinity' 是 CREATE ROLE 的默认选项,除非另有说明。

原定设置情况下,postgres 拥有授予 rds_superuser 角色的权限以及创建角色和数据库的权限。rds_superuser 角色允许 postgres 用户执行以下操作:

  • 添加可用于 Amazon RDS 的扩展。有关更多信息,请参阅 使用 Amazon RDS for PostgreSQL 支持的 PostgreSQL 功能

  • 为用户创建角色并向用户授予权限。有关更多信息,请参阅 PostgreSQL 文档中的 CREATE ROLEGRANT

  • 创建数据库。有关更多信息,请参阅 PostgreSQL 文档中的 CREATE DATABASE

  • rds_superuser 权限授予没有这些权限的用户角色,并根据需要撤销权限。我们建议您仅向执行超级用户任务的那些用户授予此角色。换句话说,您可以将此角色授予数据库管理员 (DBA) 或系统管理员。

  • 向没有 rds_superuser 角色的数据库用户授予(和撤销)rds_replication 角色。

  • 向没有 rds_superuser 角色的数据库用户授予(和撤销)rds_password 角色。

  • 通过使用 pg_stat_activity 视图获取有关所有数据库连接的状态信息。需要时,rds_superuser 可以通过使用 pg_terminate_backendpg_cancel_backend 停止任何连接。

CREATE ROLE postgres... 语句中,您可以看到 postgres 用户角色明确禁止 PostgreSQL superuser 权限。RDS for PostgreSQL 是一项托管服务,因此您无法访问主机操作系统,也无法使用 PostgreSQL superuser 账户进行连接。许多需要独立 PostgreSQL 上的 superuser 访问权限的任务都由 Amazon RDS 自动管理。

有关授权权限的更多信息,请参阅 PostgreSQL 文档中的 GRANT

rds_superuser 角色是 中的几个预定义角色之一。RDS for PostgreSQL 数据库实例。

注意

在 PostgreSQL 13 和更早版本中,预定义角色称为默认角色。

在下面的列表中,您可以找到为新 自动创建的一些其他预定义角色。RDS for 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 数据库执行许多管理任务,此角色专为处理这些管理任务而创建。此角色由 RDS for PostgreSQL 在内部用于许多管理任务。

  • rdstopmgr – Amazon RDS 在内部用于支持多可用区部署的角色。

要查看所有预定义角色,您可以连接到 您的 RDS for 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 不是数据库用户角色(无法登录),但它具有许多其他角色的权限。您还可以看到数据库用户 postgresrds_superuser 角色的成员。如前所述,postgres 是 Amazon RDS 控制台的 Create database(创建数据库)页面中的默认值。如果您选择了另一个名称,则该名称将显示在角色列表中。