ALTER ROLE
ALTER ROLE — 更改一个数据库角色
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 } SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } RESET configuration_parameter
ALTER ROLE { role_specification | ALL } RESET ALL
其中 role_specification 可以是:
role_name
| CURRENT_USER
| SESSION_USER
ALTER ROLE
更改一个 PostgreSQL 角色的属性。
前面列出的这个命令的第一种变体能够更改 CREATE ROLE 中指定的很多角色属性(覆盖了所有可能的属性,不过没有增加和移除成员关系的选项, 如果要增加和移除成员关系可使用 GRANT 和 REVOKE)。该命令中没有提到的属性保持它们之前的设置。数据库超级用户能够更改任何角色的任何这些设置。具有CREATEROLE
特权的角色能够更改任何这些设置,但是只能为非超级用户和非复制角色修改。普通 角色只能更改它们自己的密码。
第二种变体更改该角色的名称。数据库超级用户能重命名任何角色。具有CREATEROLE
特权的角色能够重命名任何非超级用户角色。当前的会话用户不能被重命名(如果需要这样做,请以一个不同的用户连接)。由于MD5
加密的密码使用角色名作为 salt,因此如果一个角色的密码是MD5
加密的,重命名该角色会清空其密码。
其余的变体用于更改一个角色的配置变量的会话默认值。如果指定的是ALL
而不是一个角色名,将会为所有角色更改该设置。
只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖postgresql.conf
中存在的值或者从postgres
命令行收到的值。这只在登录时发生,执行 SET ROLE 或者 SET SESSION AUTHORIZATION 不会导致新的配置值被设置。对于所有数据库设置的值会被附加到一个角色的数据库相关的设置所覆盖。特定数据库或角色的设置会覆盖为所有角色所作的设置。
超级用户能够更改任何人的会话默认值。具有CREATEROLE
特权的角色能够更改非超级用户的默认值。普通角色只能为它们自己设置默认值。某些配置变量 不能以这种方式设置,或者只能由一个超级用户发出的命令设置。只有超级用户能够 更改所有角色在所有数据库中的设置。
-
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
’PASSWORD NULL
VALID UNTIL
‘timestamp
’这些子句修改原来有 CREATE ROLE 设置的属性。更多信息请见
CREATE ROLE
参考页。 -
new_name
该角色的新名称。
-
database_name
要在其中设置该配置变量的数据库名称。
-
configuration_parameter
value
把这个角色的指定配置参数的会话默认值设置为给定值。如果*
value
*为DEFAULT
或者等效地使用了RESET
,角色相关的变量设置会被移除,这样该角色将会在新会话中继承系统范围的默认 设置。使用RESET ALL
可清除所有角色相关的设置。SET FROM CURRENT
可以把会话中该参数的当前值保存为角色相关的值。角色相关的变量设置只在登录时生效,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;
更改一个密码的失效日期,指定该密码应该在 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 扩展。