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 parameter { TO | = } { value | DEFAULT } ALTER ROLE name RESET parameter
ALTER ROLE 修改一个 PostgreSQL 角色的属性。
在用法中列出的这个命令的第一个变体可以修改很多 CREATE ROLE 里面声明的角色属性, 可以参阅该手册页获取细节。(所有可能的属性都有介绍,除了增加和删除成员关系的选项之外; 使用 GRANT 和 REVOKE 做这件事情。) 没有在本命令提到的属性维持它们以前的设置。数据库超级用户可以给任何角色改变任何设置。 拥有 CREATEROLE 权限的角色可以修改任意这些设置,但是只能给非超级用户角色设置。 普通的角色只能修改它们自己的口令。
第二个变种修改角色的名称。 数据库超级用户可以修改任何角色的名称。 拥有 CREATEROLE 权限的角色可以给非超级用户进行重明明。 当前会话的用户是不能改名的。(如果需要这么做,以另外一个用户的身份连接。) 因为 MD5 加密的口令使用角色名字作为加密的盐粒, 所以,如果口令是 MD5 加密的,那么给一个用户改名会清空其口令。
第三和第四个变体为特定的配置变量修改一个角色的会话缺省。 在该角色随后开始一个新的会话之后,指定的数值变成会话缺省, 覆盖 postgresql.conf 里面的或者 postmaster 命令行上的参数。(对于没有 LOGIN 权限的角色,会话缺省没有什么效果。) 普通的角色可以改变自己的会话缺省。超级用户可以修改任何人的会话缺省。 拥有 CREATEROLE 权限的角色可以给非超级用户修改缺省。 有些变量不能用这个方法设置,或者是只能由超级用户来设置。
需要修改属性的角色的名称。
这些子句修改最初由 CREATE ROLE 设置的属性,参阅该命令获取更多信息。
角色的新名称。
把该角色指定的配置参数缺省值设置为给出值。 如果 value 是 DEFAULT, 或者是使用了等效的 RESET,则删除角色特定的变量设置, 这样改角色将在新的会话里继承系统范围的缺省值。 使用 RESET ALL 清理所有角色相关的设置。
参阅 SET 和 Chapter 17 获取有关允许的参数名字和数值的更多信息。
使用 CREATE ROLE 增加新的角色, 以及 DROP ROLE 删除角色。
ALTER ROLE 不能改变角色的成员关系。 使用 GRANT 和 REVOKE 做这个事情。
我们也可以把会话缺省与数据库绑定,而不是和角色绑定; 参阅 ALTER DATABASE。 如果有冲突,那么角色相关的设置覆盖数据库相关的设置。
改变一个角色的口令:
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
改变口令失效的日期,声明口令应该在 2015 年五月四日中午失效, 时区是比 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;