ALTER ROLE

ALTER ROLE-更改数据库角色

Synopsis

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'
    | 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_USER
  | SESSION_USER

Description

ALTER ROLE更改 PostgreSQL 角色的属性。

概要中列出的此命令的第一个变体可以更改可以在CREATE ROLE中指定的许多角色属性。 (涵盖了所有可能的属性,除了没有用于添加或删除成员资格的选项;为此使用GRANTREVOKE。)命令中未提及的属性保留其先前的设置。数据库超级用户可以为任何角色更改任何这些设置。具有CREATEROLE特权的角色可以更改这些设置中的任何设置,但仅适用于非超级用户和非复制角色。普通角色只能更改自己的密码。

第二个变体更改角色的名称。数据库超级用户可以重命名任何角色。具有CREATEROLE特权的角色可以重命名非超级用户角色。当前会话用户无法重命名。 (如果需要,请以其他用户身份连接.)由于MD5加密的密码将角色名称用作加密盐,因此,如果密码是MD5加密的,重命名角色将清除其密码。

其余的变体将更改配置变量的角色会话默认值,无论是对于所有数据库,还是在指定IN DATABASE子句时,仅针对命名数据库中的会话。如果指定了ALL而不是角色名称,则会更改所有角色的设置。将ALLIN DATABASE一起使用实际上与使用命令ALTER DATABASE ... SET ...相同。

每当角色随后启动新会话时,指定的值即成为会话默认值,从而覆盖postgresql.conf中存在的或从postgres命令行接收到的任何设置。这仅在登录时发生;执行SET ROLE设置会话授权不会导致设置新的配置值。为所有数据库设置的设置将被附加到角色的特定于数据库的设置覆盖。特定数据库或特定角色的设置将覆盖所有角色的设置。

超级用户可以更改任何人的会话默认设置。具有CREATEROLE特权的角色可以更改非超级用户角色的默认设置。普通角色只能为其设置默认值。某些配置变量不能以这种方式设置,或者仅在超级用户发出命令时才能设置。只有超级用户才能更改所有数据库中所有角色的设置。

Parameters

  • name

    • 要更改其属性的角色的名称。
  • CURRENT_USER

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

    • 更改当前会话用户,而不是明确标识的角色。
  • SUPERUSER
    NOSUPERUSER
    CREATEDB
    NOCREATEDB
    CREATEROLE
    NOCREATEROLE
    INHERIT
    NOINHERIT
    LOGIN
    NOLOGIN
    REPLICATION
    NOREPLICATION
    BYPASSRLS
    NOBYPASSRLS
    CONNECTION LIMIT connlimit
    [ ENCRYPTED ] PASSWORD password
    VALID UNTIL ' timestamp '

    • 这些子句更改最初由CREATE ROLE设置的属性。有关更多信息,请参见CREATE ROLE参考页。
  • new_name

    • 角色的新名称。
  • database_name

    • 应该在其中设置配置变量的数据库的名称。
  • configuration_parameter
    value

    • 将指定配置参数的此角色的会话默认设置为给定值。如果* value *为DEFAULT或等效地使用RESET,则将删除特定于角色的变量设置,因此该角色将在新会话中继承系统范围的默认设置。使用RESET ALL清除所有特定于角色的设置。 SET FROM CURRENT将会话的当前参数值保存为特定于角色的值。如果指定了IN DATABASE,则仅为给定角色和数据库设置或删除配置参数。

特定于角色的变量设置仅在登录时生效; SET ROLE设置会话授权不处理特定于角色的变量设置。

有关允许的参数名称和值的更多信息,请参见SETChapter 19

Notes

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

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

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

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

Examples

更改角色的密码:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

删除角色的密码:

ALTER ROLE davide WITH PASSWORD NULL;

更改密码的到期日期,指定密码应在 UTC 之前一小时的时区于 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;

Compatibility

ALTER ROLE语句是 PostgreSQL 扩展。

See Also

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET