Skip to content

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。)命令中未提及的属性保留其之前的设置。数据库超级用户可以更改任何角色的任何这些设置。具有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第 20 章

注释

使用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;

为角色提供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 ROLEDROP ROLEALTER DATABASESET