选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.5 已于 2021 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

ALTER ROLE

ALTER ROLE — 更改数据库角色

大纲

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

其中option可以是:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | 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

其中role_specification可以是:

    role_name
  | CURRENT_USER
  | SESSION_USER

描述

ALTER ROLE更改 PostgreSQL角色的属性。

概要中列出的此命令的第一种形式可以更改CREATE ROLE中可指定的许多角色属性。(涵盖了所有可能的属性,但没有用于添加或移除成员资格的选项;请使用GRANTREVOKE完成此操作。)命令中未提及的属性保留其以前的设置。数据库超级用户可以更改任何角色的任何这些设置。拥有CREATEROLE权限的角色可以更改除SUPERUSERREPLICATIONBYPASSRLS之外的任何这些设置,但只能针对非超级用户且非复制角色。普通角色只能更改自己的密码。

第二种形式更改角色的名称。数据库超级用户可以重命名任何角色。拥有CREATEROLE权限的角色可以重命名非超级用户角色。当前会话用户不能被重命名。(如果需要这样做,请以其他用户连接。)由于MD5加密的密码使用角色名作为密码学盐,重命名角色会清除其密码(如果密码使用MD5加密)。

其余形式更改角色针对配置变量的会话默认值,可以针对所有数据库,也可以在指定 IN DATABASE子句时仅针对指定数据库中的会话。如果指定的是 ALL而不是角色名,就会更改所有角色的该项设置。将 ALLIN DATABASE一起使用,实际上与命令 ALTER DATABASE ... SET ...的效果相同。

当该角色随后启动新会话时,指定值将成为会话默认值,覆盖postgresql.conf中的设置或从postgres命令行接收的设置。这只发生在登录时;执行SET ROLESET SESSION AUTHORIZATION不会导致设置新的配置值。为所有数据库设置的设置会被附加到角色的数据库特定设置覆盖。特定数据库或特定角色的设置会覆盖为所有角色设置的设置。

超级用户可以更改任何人的会话默认值。拥有CREATEROLE权限的角色可以更改非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能以这种方式设置,或者只能由超级用户执行命令来设置。只有超级用户可以更改所有数据库中所有角色的设置。

参数

name

将要修改其属性的角色名称。

CURRENT_USER

修改当前用户,而不是显式标识的角色。

SESSION_USER

修改当前会话用户,而不是显式标识的角色。

SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
CREATEUSER
NOCREATEUSER
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT connlimit
PASSWORD password
ENCRYPTED
UNENCRYPTED
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第 18 章

注解

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

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

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

也可以把会话默认值绑定到特定数据库,而不是角色;详见 ALTER DATABASE。如果发生冲突,同时针对数据库和角色的设置 会覆盖角色特定设置,而角色特定设置又会覆盖数据库特定设置。

示例

更改角色的密码:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

移除角色的密码:

ALTER ROLE davide WITH PASSWORD NULL;

更改密码的失效日期,并指定该密码应在比 UTC快 1 小时的时区中,于 2015 年 5 月 4 日中午失效:

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的扩展。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。