ALTER ROLE — 更改一个数据库角色
ALTER ROLErole_specification
[ WITH ]option
[ ... ] 其中option
可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit
| [ ENCRYPTED ] PASSWORD 'password
' | PASSWORD NULL | VALID UNTIL 'timestamp
' ALTER ROLEname
RENAME TOnew_name
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
FROM CURRENT ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESETconfiguration_parameter
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESET ALL 其中role_specification
可以是:role_name
| CURRENT_ROLE | CURRENT_USER | SESSION_USER
ALTER ROLE
更改一个
PostgreSQL角色的属性。
前面列出的这个命令的第一种变体能够更改CREATE ROLE
中
指定的很多角色属性(覆盖了所有可能的属性,不过没有增加和移除成员关系的选项,
如果要增加和移除成员关系可使用GRANT
和
REVOKE
)。该命令中没有提到的属性保持它们之前的设置。
数据库超级用户能够更改任何角色的任何这些设置。具有CREATEROLE
特权的角色能够更改除SUPERUSER
,REPLICATION
和
BYPASSRLS
外的任何这些设置,但是只能为非超级用户和非复制角色修改。普通
角色只能更改它们自己的口令。
第二种变体更改该角色的名称。数据库超级用户能重命名任何角色。具有
CREATEROLE
特权的角色能够重命名任何非超级用户角色。当前的会话
用户不能被重命名(如果需要这样做,请以一个不同的用户连接)。由于
MD5
加密的口令使用角色名作为 salt,因此如果一个角色的口令是
MD5
加密的,重命名该角色会清空其口令。
其余的变体用于更改一个角色的配置变量的会话默认值,可以为所有数据库设置,或者
只为IN DATABASE
中指定的数据库设置。如果指定的是
ALL
而不是一个角色名,将会为所有角色更改该设置。把
ALL
和IN DATABASE
一起使用实际上和使用命
令ALTER DATABASE ... SET ...
相同。
只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖
postgresql.conf
中存在的值或者从
postgres
命令行收到的值。这只在登录时发生,执行
SET ROLE
或者
SET SESSION AUTHORIZATION
不会导致新的配置值被设置。
对于所有数据库设置的值会被附加到一个角色的数据库相关的设置所覆盖。特定数
据库或角色的设置会覆盖为所有角色所作的设置。
超级用户能够更改任何人的会话默认值。具有CREATEROLE
特权的角色
能够更改非超级用户的默认值。普通角色只能为它们自己设置默认值。某些配置变量
不能以这种方式设置,或者只能由一个超级用户发出的命令设置。只有超级用户能够
更改所有角色在所有数据库中的设置。
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
不会处理角色
相关的变量设置。
使用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扩展。