2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不受支持的版本: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:

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

提前一小时的时区

ALTER ROLE fred VALID UNTIL 'infinity';

使密码永久有效

ALTER ROLE miriam CREATEROLE CREATEDB;

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

ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

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

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

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

兼容性

ALTER ROLE 语句是 PostgreSQL 扩展。

另请参阅

 ALTER ROUTINE

提交更正