Postgresql 中文操作指南

ALTER ROLE

ALTER ROLE — 更改数据库角色

Synopsis

ALTER ROLE role_specification [ WITH ] option [ ... ]

where option can be:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
    | VALID UNTIL 'timestamp'

ALTER ROLE name RENAME TO new_name

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL

where role_specification can be:

    role_name
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

Description

ALTER ROLE 更改 PostgreSQL 角色的属性。

在概要中列出的此命令的第一个变体可以更改 CREATE ROLE 中可以指定的角色属性(涵盖了所有可能的属性,但没有添加或删除成员资格的选项;请使用 GRANTREVOKE )。命令中未提及的属性保留其以前的设置。数据库超级用户可以为任何角色更改其中任何设置。具有 CREATEROLE 权限的非超级用户角色可以更改大多数这些属性,但只能针对已向其授予 ADMIN OPTION 的非超级用户和非复制角色进行更改。非超级用户不能更改 SUPERUSER 属性,只有在他们拥有对应的属性时,才能更改 CREATEDBREPLICATIONBYPASSRLS 属性。普通角色只能更改他们自己的密码。

第二个变体更改角色的名称。数据库超级用户可以重命名任何角色。具有 CREATEROLE 权限的角色可以重新命名已向其授予 ADMIN OPTION 的非超级用户角色。当前会话用户不能被重命名。(与另一个用户建立连接,如果您需要这样做的话)。因为 MD5 加密密码使用角色名称作为加密 salt,因此如果密码是 MD5 加密,重命名一个角色将清除其密码。

其余变体更改角色的配置变量会话默认值,无论针对所有数据库还是在指定 IN DATABASE 子句时,仅针对指定数据库中的会话进行更改。如果指定 ALL 而不是角色名称,这将更改所有角色的设置。将 ALLIN DATABASE 一起使用实际上与使用命令 ALTER DATABASE …​ SET …​ 相同。

无论何时角色随后开始一个新的会话,指定的值就会成为会话默认值,覆盖 postgresql.conf 中存在的任何设置或从 postgres 命令行接收的任何设置。这仅在登录时发生;执行 SET ROLESET SESSION AUTHORIZATION 不会导致设置新的配置值。针对所有数据库设置的设置将被附加到角色的特定数据库设置覆盖。特定数据库或特定角色的设置将覆盖所有角色的设置。

超级用户可以更改任何人的会话默认值。具有 CREATEROLE 权限的角色可以更改已向其授予 ADMIN OPTION 的非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能按此方式设置,或者只有在超级用户发布命令时才能设置。只有超级用户可以更改所有数据库中所有角色的设置。

Parameters

  • name #

    • 要更改其属性的角色的名称。

  • CURRENT_ROLE__CURRENT_USER #

    • 更改当前用户,而不是明确确定的角色。

  • SESSION_USER #

    • 更改当前会话用户,而不是明确确定的角色。

  • SUPERUSER_NOSUPERUSER_CREATEDB_NOCREATEDB_CREATEROLE_NOCREATEROLE_INHERIT_NOINHERIT_LOGIN_NOLOGIN_REPLICATION_NOREPLICATION_BYPASSRLS_NOBYPASSRLS_CONNECTION LIMIT connlimit [ ENCRYPTED ] PASSWORD ' password ' PASSWORD NULL_VALID UNTIL ' timestamp_ ' #

    • 这些子句更改了原本由 CREATE ROLE 设置的属性。有关详细信息,请参阅 CREATE ROLE 参考页面。

  • new_name #

    • 该角色的新名称。

  • database_name #

    • 应在其中设置该配置变量的数据库名称。

  • configuration_parameter__value #

    • 将此角色针对指定配置参数的会话默认值设置为指定值。如果 valueDEFAULT 或等效地使用了 RESET ,则删除特定于角色的变量设置,因此该角色将在新会话中继承系统范围的默认设置。请使用 RESET ALL 来清除所有特定于角色的设置。 SET FROM CURRENT 将会话的参数当前值保存为特定于角色的值。如果指定了 IN DATABASE ,则仅为给定的角色和数据库设置或删除配置参数。

    • 特定于角色的变量设置仅在登录时生效; SET ROLESET SESSION AUTHORIZATION 不处理特定于角色的变量设置。

    • 请参阅 SETChapter 20 以获取有关允许的参数名称和值的详细信息。

Notes

使用 CREATE ROLE 添加新角色,使用 DROP ROLE 删除角色。

ALTER ROLE 无法更改角色的成员身份。请使用 GRANTREVOKE 来进行该操作。

使用此命令指定未加密密码时必须谨慎。此密码将以纯文本形式传输至服务器,且也可能记录于客户端命令历史记录或服务器日志中。 psql 中包含一个命令 \password ,可以使用该命令来更改角色密码且不暴露纯文本密码。

也可以将会话默认值绑定到特定数据库,而不是角色;请参阅 ALTER DATABASE 。如果有冲突,则特定于数据库角色的设置将覆盖特定于角色的设置,而后者又将覆盖特定于数据库的设置。

Examples

更改角色密码:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

删除角色密码:

ALTER ROLE davide WITH PASSWORD NULL;

更改密码有效期,指定密码应于 2015 年 5 月 4 日中午(UTC+1 小时时区)过期:

ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';

使密码永久有效:

ALTER ROLE fred VALID UNTIL 'infinity';

授予角色管理其他角色和创建新数据库的能力:

ALTER ROLE miriam CREATEROLE CREATEDB;

授予角色非默认的 maintenance_work_mem 参数设置:

ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

授予角色 client_min_messages 参数的非默认数据库特定设置:

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

Compatibility

ALTER ROLE 语句是 PostgreSQL 扩展。

See Also