9.3 9.4 9.5 9.6 10 11 12 13
阿里云PostgreSQL 问题报告 纠错本页面

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 可以是:

    [ GROUP ] role_name
  | CURRENT_USER
  | SESSION_USER

描述

ALTER ROLE更改一个 PostgreSQL角色的属性。

前面列出的这个命令的第一种变体能够更改CREATE ROLE 中指定的很多角色属性(覆盖了所有可能的属性,不过没有增加和移除成员关系的选项, 如果要增加和移除成员关系可使用GRANTREVOKE)。该命令中没有提到的属性保持它们之前的设置。 数据库超级用户能够更改任何角色的任何这些设置。具有CREATEROLE 特权的角色能够更改任何这些设置,但是只能为非超级用户和非复制角色修改。 普通角色只能更改它们自己的口令。

第二种变体更改该角色的名称。数据库超级用户能重命名任何角色。具有 CREATEROLE特权的角色能够重命名任何非超级用户角色。 当前的会话用户不能被重命名(如果需要这样做,请以一个不同的用户连接)。由于 MD5加密的口令使用角色名作为 salt,因此如果一个角色的口令是 MD5加密的,重命名该角色会清空其口令。

其余的变体用于更改一个角色的配置变量的会话默认值,可以为所有数据库设置, 或者只为IN DATABASE中指定的数据库设置。如果指定的是 ALL而不是一个角色名,将会为所有角色更改该设置。把 ALLIN DATABASE一起使用实际上和使用命令 ALTER DATABASE ... SET ...相同。

只要该角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖 postgresql.conf中存在的值或者从 postgres命令行收到的值。这只在登录时发生,执行 SET ROLE或者 SET 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 ROLE以及 SET 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;

更改一个口令的失效日期,指定该口令应该在 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;

兼容性

ALTER ROLE语句是一个 PostgreSQL扩展。

另见

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET
<
/BODY >