SQL COMMAND · 角色与权限
ALTER ROLE
更改数据库角色
change a database role
ALTER角色与权限引入 8.1现存至 20 devel10 次语法变更
- 动词
ALTER- 对象
ROLE- 分组
- 角色与权限
- 引入版本
- 8.1
- 状态
- 现存
- 语法变更次数
- 10
- 手册小节数
- 6
版本轨迹
相对 PostgreSQL 17 无变化。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
option
ALTER ROLE · 语法 2
ALTER ROLE · 语法 3
ALTER ROLE · 语法 4
ALTER ROLE · 语法 5
ALTER ROLE · 语法 6
role_specification
语法概要
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_ROLECURRENT_USER修改当前用户,而不是显式标识的角色。
SESSION_USER修改当前会话用户,而不是显式标识的角色。
SUPERUSERNOSUPERUSERCREATEDBNOCREATEDBCREATEROLENOCREATEROLEINHERITNOINHERITLOGINNOLOGINREPLICATIONNOREPLICATIONBYPASSRLSNOBYPASSRLSCONNECTION LIMITconnlimit
[ENCRYPTED]PASSWORD'password'PASSWORD NULLVALID UNTIL'timestamp'这些子句用于更改最初由
CREATE ROLE设置的属性。欲了解更多信息,请参见CREATE ROLE参考页。new_name角色的新名称。
database_name应在其中设置该配置变量的数据库名称。
configuration_parametervalue将该角色在指定配置参数上的会话默认值设为给定值。如果
value是DEFAULT,或者等效地使用了RESET,则会移除角色特定变量设置,因此该角色在新会话中将继承系统范围的默认设置。使用RESET ALL可清除所有角色特定设置。SET FROM CURRENT会将该参数在当前会话中的值保存为角色特定值。如果指定了IN DATABASE,则只会为给定角色和数据库设置或移除该配置参数。角色特定变量设置只在登录时生效;
SET ROLE和SET SESSION AUTHORIZATION不会处理角色特定变量设置。
注解
使用 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 的扩展。
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 17← 16正文更新
正文更新PostgreSQL 16← 15正文更新
正文更新PostgreSQL 14← 13语法变化
+ | CURRENT_ROLE+ | CURRENT_USER正文更新PostgreSQL 11← 10语法变化
+ | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL正文更新PostgreSQL 10← 9.6语法变化
− | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'正文更新PostgreSQL 9.6← 9.5语法变化
− | CREATEUSER | NOCREATEUSER正文更新PostgreSQL 9.5← 9.4语法变化
+ ALTER ROLE role_specification [ WITH ] option [ ... ]+ | BYPASSRLS | NOBYPASSRLS+ | CONNECTION LIMIT connlimit+ 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_name+ | CURRENT_USER+ | SESSION_USER− ALTER ROLE name [ [ WITH ] option [ ... ] ]− ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }− ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT− ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET configuration_parameter− ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET ALL正文更新PostgreSQL 9.3← 9.2语法变化
+ ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }+ ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT+ ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET configuration_parameter+ ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET ALL正文更新PostgreSQL 9.1← 9.0语法变化
+ | REPLICATION | NOREPLICATION正文更新PostgreSQL 9.0← 8.4语法变化
+ ALTER ROLE name RENAME TO new_name+ ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }+ ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT+ ALTER ROLE name [ IN DATABASE database_name ] RESET configuration_parameter+ ALTER ROLE name [ IN DATABASE database_name ] RESET ALL− where option can be:− ALTER ROLE name RENAME TO newname正文更新PostgreSQL 8.4← 8.3正文更新
正文更新PostgreSQL 8.3← 8.2语法变化
+ ALTER ROLE name SET configuration_parameter FROM CURRENT+ ALTER ROLE name RESET configuration_parameter+ ALTER ROLE name RESET ALL正文更新PostgreSQL 8.2← 8.1语法变化
+ ALTER ROLE name SET configuration_parameter { TO | = } { value | DEFAULT }+ ALTER ROLE name RESET configuration_parameter− ALTER ROLE name SET parameter { TO | = } { value | DEFAULT }− ALTER ROLE name RESET parameter正文更新PostgreSQL 8.1← 8.0新增此命令
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
GRANT | GRANT | — | 1717 次 | |
| 定义访问权限 | 现存 | |||
REVOKE | REVOKE | — | 1719 次 | |
| 撤销访问权限 | 现存 | |||
ALTER DEFAULT PRIVILEGES | ALTER | DEFAULT PRIVILEGES | 186 次 | |
| 定义默认访问权限 | 现存 | |||
CREATE GROUP | CREATE | GROUP | 198 次 | |
| 定义一个新的数据库角色 | 现存 | |||
ALTER GROUP | ALTER | GROUP | 144 次 | |
| 更改角色名称或成员资格 | 现存 | |||
DROP GROUP | DROP | GROUP | 8.22 次 | |
| 移除一个数据库角色 | 现存 | |||
SECURITY LABEL | SECURITY | LABEL | 126 次 | |
| 定义或更改应用于对象的安全标签 | 现存 | |||
DROP OWNED | DROP | OWNED | 142 次 | |
| 移除一个数据库角色所拥有的数据库对象 | 现存 | |||
REASSIGN OWNED | REASSIGN | OWNED | 142 次 | |
| 更改一个数据库角色所拥有的数据库对象的所有权 | 现存 | |||
CREATE POLICY | CREATE | POLICY | 142 次 | |
| 为一个表定义一条新的行级安全策略 | 现存 | |||
ALTER POLICY | ALTER | POLICY | 141 次 | |
| 更改一条行级安全策略的定义 | 现存 | |||
DROP POLICY | DROP | POLICY | 9.61 次 | |
| 从一个表中移除一条行级安全策略 | 现存 | |||
CREATE ROLE | CREATE | ROLE | 177 次 | |
| 定义一个新的数据库角色 | 现存 | |||
ALTER ROLE | ALTER | ROLE | 1410 次 | |
| 更改数据库角色 | 现存 | |||
DROP ROLE | DROP | ROLE | 8.21 次 | |
| 移除一个数据库角色 | 现存 | |||
SET ROLE | SET | ROLE | 9.01 次 | |
| 设置当前会话的当前用户标识符 | 现存 | |||
SET SESSION AUTHORIZATION | SET | SESSION AUTHORIZATION | 9.02 次 | |
| 设置当前会话的会话用户标识符和当前用户标识符 | 现存 | |||
CREATE USER | CREATE | USER | 1912 次 | |
| 定义一个新的数据库角色 | 现存 | |||
ALTER USER | ALTER | USER | 1417 次 | |
| 更改数据库角色 | 现存 | |||
DROP USER | DROP | USER | 8.23 次 | |
| 移除一个数据库角色 | 现存 | |||