2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

ALTER ROLE

ALTER ROLE — 更改数据库角色

概要

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

描述

ALTER ROLE 更改 PostgreSQL 角色的属性。

此命令的第一个变体(在语法摘要中列出)可以更改 CREATE ROLE 中指定的大部分角色属性。(涵盖了所有可能的属性,但没有用于添加或删除成员资格的选项;请使用 GRANTREVOKE 来实现。)命令中未提及的属性将保留其先前设置。数据库超级用户可以更改任何角色的任何这些设置,但无法更改 引导超级用户SUPERUSER 属性。具有 CREATEROLE 权限的非超级用户角色可以更改这些属性中的大部分,但只能更改他们已被授予 ADMIN OPTION 的非超级用户和非复制角色。非超级用户无法更改 SUPERUSER 属性,并且只有在他们自身拥有相应属性时才能更改 CREATEDBREPLICATIONBYPASSRLS 属性。普通角色只能更改自己的密码。

第二个变体更改角色的名称。数据库超级用户可以重命名任何角色。具有 CREATEROLE 权限的角色可以重命名他们已被授予 ADMIN OPTION 的非超级用户角色。当前会话用户无法被重命名。(如果您需要执行此操作,请连接为另一个用户。)由于 MD5 加密密码使用角色名作为加密盐,因此重命名角色会清除其密码(如果密码是 MD5 加密的)。

其余的变体更改角色的会话默认配置参数,可以为所有数据库设置,或者通过指定 IN DATABASE 子句,只为指定数据库中的会话设置。如果用 ALL 替换角色名,这将更改所有角色的设置。在 IN DATABASE 中使用 ALL 实际上等同于使用命令 ALTER DATABASE ... SET ...

之后,当角色开始新的会话时,指定的 value 将成为会话默认值,覆盖 postgresql.conf 中的任何设置或从 postgres 命令行接收到的设置。这仅在登录时发生;执行 SET ROLESET SESSION AUTHORIZATION 不会触发新的配置值设置。为所有数据库设置的值会被附加到角色上的数据库特定设置覆盖。特定数据库或特定角色的设置会覆盖所有角色的设置。

超级用户可以更改任何人的会话默认值。拥有 CREATEROLE 权限的角色可以更改他们已授予 ADMIN OPTION 的非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量无法通过这种方式设置,或者只有在超级用户发出命令时才能设置。只有超级用户可以更改所有数据库中所有角色的设置。

参数

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 不处理角色特定的变量设置。

有关允许的参数名称和值的更多信息,请参阅 SET第 19 章

注释

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

ALTER ROLE 无法更改角色的成员资格。请使用 GRANTREVOKE 来完成此操作。

使用此命令指定未加密密码时必须小心。密码将以明文形式传输到服务器,并且可能会记录在客户端的命令历史记录或服务器日志中。psql 包含一个 \password 命令,该命令可用于更改角色的密码,而无需暴露明文密码。

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

示例

更改角色的密码

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

删除角色的密码

ALTER ROLE davide WITH PASSWORD NULL;

更改密码过期日期,指定密码将在 2015 年 5 月 4 日中午过期,使用的时区比UTC:

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;

兼容性

ALTER ROLE 语句是 PostgreSQL 的一个扩展。

提交更正

如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 来报告文档问题。