↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Wiki / SQL 命令

ALTER ROLE

更改数据库角色

英文手册覆盖始于 PostgreSQL 6.4. 来源历史与运行验证各自保留独立版本边界。

当前阅读 PG 18·选择有来源记录的版本

anchor
SQL-ALTERROLE
file
sql-alterrole.html
lang
en
name
ALTER ROLE
purpose
change a database role
purpose zh
未知
sections same as
未知
slug
18

语法

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 role_specification WITH option
option
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 · 语法 2
ALTER ROLE name RENAME TO new_name
ALTER ROLE · 语法 3
ALTER ROLE role_specification ALL IN DATABASE database_name SET configuration_parameter TO = value DEFAULT
ALTER ROLE · 语法 4
ALTER ROLE role_specification ALL IN DATABASE database_name SET configuration_parameter FROM CURRENT
ALTER ROLE · 语法 5
ALTER ROLE role_specification ALL IN DATABASE database_name RESET configuration_parameter
ALTER ROLE · 语法 6
ALTER ROLE role_specification ALL IN DATABASE database_name RESET ALL
role_specification
role_name CURRENT_ROLE CURRENT_USER SESSION_USER

版本定义 PG 18

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

其中option可以是:

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

其中role_specification可以是:
role_name
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER

描述

ALTER ROLE更改 PostgreSQL角色的属性。

语法概要中列出的第一种形式可以更改许多可在 CREATE ROLE中指定的角色属性。(涵盖了所有可能的属性,但没有用于添加或移除成员资格的选项;为此请使用 GRANT和 REVOKE。)命令中未提及的属性保持原有设置不变。数据库超级用户可以更改任何角色的这些设置,但不能更改引导超级用户的 SUPERUSER属性。拥有CREATEROLE权限的非超级用户角色也可以更改其中的大多数属性,但只能更改其已被授予ADMIN OPTION的、非超级用户且非复制角色的这些属性。非超级用户不能更改SUPERUSER属性;只有其自身也拥有相应属性时,才能更改 CREATEDB、REPLICATION和BYPASSRLS属性。普通角色只能更改自己的密码。

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

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

以后每当该角色启动一个新会话时,指定值就会成为该会话的默认值,并覆盖 postgresql.conf中已有的设置或从 postgres命令行接收到的设置。这只会在登录时发生;执行 SET ROLE或 SET 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

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

角色特定变量设置只在登录时生效;SET ROLE和 SET SESSION AUTHORIZATION不会处理角色特定变量设置。

关于允许的参数名称和值详见SET和第 19 章。

注解

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

ALTER ROLE无法更改角色的成员资格。请使用GRANT和 REVOKE执行这类操作。

用这个命令指定未加密密码时必须加以注意。密码将以明文形式传输到服务器,并且也可能被记录在客户端命令历史或服务器日志中。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的扩展。

另见

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET

比较版本

完整来源事实

synopsis html

ALTER ROLE <em class="replaceable"><code>role_specification</code></em> [ WITH ] <em class="replaceable"><code>option</code></em> [ ... ]

<span class="phrase">where <em class="replaceable"><code>option</code></em> can be:</span>

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT <em class="replaceable"><code>connlimit</code></em>
    | [ ENCRYPTED ] PASSWORD '<em class="replaceable"><code>password</code></em>' | PASSWORD NULL
    | VALID UNTIL '<em class="replaceable"><code>timestamp</code></em>'

ALTER ROLE <em class="replaceable"><code>name</code></em> RENAME TO <em class="replaceable"><code>new_name</code></em>

ALTER ROLE { <em class="replaceable"><code>role_specification</code></em> | ALL } [ IN DATABASE <em class="replaceable"><code>database_name</code></em> ] SET <em class="replaceable"><code>configuration_parameter</code></em> { TO | = } { <em class="replaceable"><code>value</code></em> | DEFAULT }
ALTER ROLE { <em class="replaceable"><code>role_specification</code></em> | ALL } [ IN DATABASE <em class="replaceable"><code>database_name</code></em> ] SET <em class="replaceable"><code>configuration_parameter</code></em> FROM CURRENT
ALTER ROLE { <em class="replaceable"><code>role_specification</code></em> | ALL } [ IN DATABASE <em class="replaceable"><code>database_name</code></em> ] RESET <em class="replaceable"><code>configuration_parameter</code></em>
ALTER ROLE { <em class="replaceable"><code>role_specification</code></em> | ALL } [ IN DATABASE <em class="replaceable"><code>database_name</code></em> ] RESET ALL

<span class="phrase">where <em class="replaceable"><code>role_specification</code></em> can be:</span>

    <em class="replaceable"><code>role_name</code></em>
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

synopsis text

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

来源引用

完整定义与证据 JSON

定义来源

center · PostgreSQL 18 · a709ab85

正文语言: zh-Hans · 1b5ca64c