描述
ALTER ROLE
修改一个
PostgreSQL
角色的属性。
这个命令的第一种形式可以修改很多
CREATE ROLE
里面声明的角色属性。
(除了增加和删除成员关系的选项之外,所有可能的属性都有介绍;使用
GRANT
和
REVOKE
可以实现前述两件事。)
没有在命令里提到的属性维持它们以前的设置。数据库超级用户可以给任何角色改变任何设置。
拥有
CREATEROLE
权限的角色可以修改任意这些设置,但是只能给非超级用户和非复制用户角色设置。
普通的角色只能修改它们自己的口令。
第二种形式可以修改角色的名称。数据库超级用户可以修改任何角色的名称。
拥有
CREATEROLE
权限的角色可以给非超级用户角色进行重命名。
当前会话的用户的角色是不能改名的。(如果一定需要这么做,则必须以另外一个用户的身份连接系统。)
因为
MD5
加密的口令使用角色名字作为加密的盐粒,所以, 如果口令是
MD5
加密的,那么给一个角色改名会清空其口令。
其他的形式更改一个角色的会话配置参数默认值,该值要么针对所有的数据库,
要么使用
IN DATABASE
选项,仅针对指定的数据库。
如果是未指定角色名称而是使用了
ALL
选项,则所有角色的相关参数都会更改。
当同时使用
ALL
和
IN DATABASE
选项时,就等同于使用
ALTER DATABASE ... SET ...
。
当角色随后开启一个新会话,指定的值变成了会话的默认值,这些参数值会覆盖任何
postgresql.conf
中的设置或者从
postgres
命令行接收到的参数值。
这仅在登录时发生;执行
SET ROLE
或者
SET SESSION AUTHORIZATION
不会引起新的配置值设置。
为所有数据库所设定的参数会被附加到一个角色上的特定数据库的参数所覆盖。为指定数据库或指定角色所设定的参数会覆盖为所有角色设定的参数。
超级用户可以更改任何一个会话默认值。有
CREATEROLE
权限的角色可以为非超级用户角色更改默认值。
普通的角色只能为自己设置默认值。 某些配置变量不能这样设置,或者只要超级用户才能执行。
只有超级用户才能为所有数据库中的所有角色更改参数设置。
注意
使用
CREATE ROLE
增加新角色,使用
DROP ROLE
删除旧角色。
ALTER ROLE
不能改变角色的成员关系。可以使用
GRANT
和
REVOKE
做这个事情。
使用这个命令指定一个未加密的密码时必须小心,因为密码将以明文方式传送到服务器,并且可能被客户端命令历史记录或者被服务器日志记录。
psql
包含一个可以用来安全修改角色密码的
\password
命令,这个命令不会暴露明文的密码。
也可以把会话缺省参数值与数据库绑定而不是与角色绑定;参阅
ALTER DATABASE
。
如果有冲突,那么指定角色加数据库的参数设置将覆盖指定角色的参数设置,而后者又可以覆盖指定数据库的参数设置。