ALTER ROLE

Name

ALTER ROLE -- 修改一个数据库角色

Synopsis

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 new_name

ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE name [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE name [ IN DATABASE database_name ] RESET ALL

描述

ALTER ROLE修改一个PostgreSQL角色的属性。

这个命令的第一个变体可以修改很多CREATE ROLE里面声明的角色属性,可以参阅相应手册页获取细节。所有可能的属性都有介绍,除了增加和删除成员关系的选项之外(使用GRANTREVOKE做这件事)。 没有在命令里提到的属性维持它们以前的设置。数据库超级用户可以给任何角色改变任何设置。拥有CREATEROLE权限的角色可以修改任意这些设置,但是只能给非超级用户角色设置。普通的角色只能修改它们自己的口令。

第二个变量修改角色的名称。数据库超级用户可以修改任何角色的名称。 拥有CREATEROLE权限的角色可以给非超级用户进行重命名。 当前会话的用户是不能改名的。如果需要这么做,必须以另外一个用户的身份连接。 因为MD5加密的口令使用角色名字作为加密的盐粒,所以, 如果口令是MD5加密的,那么给一个用户改名会清空其口令。

保留的变体为一个配置变量更变一个角色的会话默认值,要么是对所有的数据库,要么是当 IN DATABASE语句被指定,仅针对命名的数据库中的会话。 当角色随后开启一个新会话,指定的值变成了会话的默认值,重写任何 postgresql.conf中的设置或者已从postgres 命令行接收到。 这仅在登录时发生;执行SET ROLE或者 SET SESSION AUTHORIZATION不会引起新的配置值设置。 为所有数据库所设定的设置被附加到一个角色上的特定数据库设置重写。 超级用户可以更改任何一个会话默认值。有CREATEROLE权限的 角色可以为非超级用户角色更改默认值。普通的角色只能为自己设置默认值。 某些配置变量不能这样设置,或者仅在超级用户发出命令时才能设置。

第三和第四个变体为特定的配置变量修改一个角色的会话缺省值。 在该角色随后开始一个新的会话之后,指定的数值会覆盖 postgresql.conf里面的或者postgres 命令行上的参数,而变成会话缺省值。对于没有LOGIN权限的角色, 会话的缺省值没有什么意义。普通的角色可以改变自己的会话缺省。 超级用户可以修改任何人的会话缺省。拥有CREATEROLE 权限的角色可以给非超级用户修改缺省。有些变量不能用这个方法设置, 或者是只能由超级用户来设置。

参数

name

需要修改属性的角色的名称。

SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
CREATEUSER
NOCREATEUSER
INHERIT
NOINHERIT
LOGIN
NOLOGIN
CONNECTION LIMIT connlimit
PASSWORD password
ENCRYPTED
UNENCRYPTED
VALID UNTIL 'timestamp'

这些子句修改由CREATE ROLE初始设置的属性。 要获取更多详细信息,请参阅CREATE ROLE参考页。

new_name

角色的新名字。

database_name

应设置配置变量的数据库的名称。

configuration_parameter
value

把该角色指定的配置参数缺省值设置为给定值。如果 valueDEFAULT或 等效的RESET,删除特定角色的变量设置,这样该 角色将在新的会话里继承系统范围的缺省值。使用RESET ALL 清理所有角色相关的设置。SET FROM CURRENT将会话的当前 参数值保存为特定角色值。如果IN DATABASE被指定, 仅仅给定的角色和数据库可以设置或者删除配置参数。

特定角色变量的设置仅仅在登录时起效;SET ROLESET SESSION AUTHORIZATION不能进行特定角色变量设置。

参阅SETChapter 18 获取有关允许的参数名称和数值的更多信息。

注意

使用CREATE ROLE增加新角色,使用DROP ROLE删除旧角色。

ALTER ROLE不能改变角色的成员关系。可以使用GRANTREVOKE做这个事情。

使用这个命令指定一个未加密的密码时必须小心,因为密码将以明文方式传送到服务器,并且可能被客户端命令历史记录或者被服务器日志记录。psql包含一个可以用来安全修改角色密码的\password命令without exposing the cleartext password。

也可以把会话缺省与数据库绑定而不是与角色绑定;参阅ALTER DATABASE。如果有冲突,那么特定于角色的设置将覆盖特定于数据库的设置which in turn override database-specific ones。

例子

改变一个角色的口令:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

改变一个角色的口令:

ALTER ROLE davide WITH PASSWORD NULL;

改变口令失效的日期,声明口令应该在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;

给一个角色设置非缺省的client_min_messages 参数的特定数据库设置:

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

兼容性

ALTER ROLE语句是一个PostgreSQL扩展。

又见

CREATE ROLE, DROP ROLE, SET