支持的版本: 当前 (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 而不是角色名称,则此更改将更改所有角色的设置。将 ALLIN DATABASE 一起使用实际上与使用命令 ALTER DATABASE ... SET ... 相同。

每当角色随后启动新会话时,指定的值将成为会话默认值,覆盖 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 早一小时的时区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 扩展。

提交更正

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