ALTER ROLE name [ [ WITH ] option [ ... ] ] 这里的 option 可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp' ALTER ROLE name RENAME TO newname ALTER ROLE name SET configuration_parameter { TO | = } { value | DEFAULT } ALTER ROLE name RESET configuration_parameter
ALTER ROLE 修改一个数据库角色的属性。
这个命令的第一个变体可以修改很多 CREATE ROLE 里面声明的角色属性,可以参阅相应手册页获取细节。所有可能的属性都有介绍,除了增加和删除成员关系的选项之外(使用 GRANT 和 REVOKE 做这件事)。没有在命令里提到的属性维持它们以前的设置。数据库超级用户可以给任何角色改变任何设置。拥有 CREATEROLE 权限的角色可以修改任意这些设置,但是只能给非超级用户角色设置。普通的角色只能修改它们自己的口令。
第二个变种修改角色的名称。数据库超级用户可以修改任何角色的名称。拥有 CREATEROLE 权限的角色可以给非超级用户进行重命名。当前会话的用户是不能改名的。如果需要这么做,必须以另外一个用户的身份连接。因为 MD5 加密的口令使用角色名字作为加密的盐粒,所以,如果口令是 MD5 加密的,那么给一个用户改名会清空其口令。
第三和第四个变体为特定的配置变量修改一个角色的会话缺省值。在该角色随后开始一个新的会话之后,指定的数值会覆盖 postgresql.conf 里面的或者 postgres 命令行上的参数,而变成会话缺省值。对于没有 LOGIN 权限的角色,会话的缺省值没有什么意义。普通的角色可以改变自己的会话缺省。超级用户可以修改任何人的会话缺省。拥有 CREATEROLE 权限的角色可以给非超级用户修改缺省。有些变量不能用这个方法设置,或者是只能由超级用户来设置。
需要修改属性的角色的名称
这些子句修改最初由 CREATE ROLE 设置的属性,参阅该命令获取更多信息。
角色的新名称
把该角色指定的配置参数缺省值设置为给定值。如果 value 是 DEFAULT 或等效的 RESET ,则删除特定角色的变量设置,这样该角色将在新的会话里继承系统范围的缺省值。使用 RESET ALL 清理所有角色相关的设置。
使用 CREATE ROLE 增加新角色,使用 DROP ROLE 删除旧角色。
ALTER ROLE 不能改变角色的成员关系。可以使用 GRANT 和 REVOKE 做这个事情。
使用这个命令指定一个未加密的密码时必须小心,因为密码将以明文方式传送到服务器,并且可能被客户端命令历史记录或者被服务器日志记录。psql 包含一个可以用来安全修改角色密码的 \password 命令。
也可以把会话缺省与数据库绑定而不是与角色绑定;参阅 ALTER DATABASE 。如果有冲突,那么特定于角色的设置将覆盖特定于数据库的设置。
改变一个角色的口令:
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
改变口令失效的日期,声明口令应该在 2015 年 5 月 4 日中午失效,时区比 UTC 早一个小时:
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;