ALTER ROLE

Name

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

Synopsis

ALTER ROLE _name_ [ [ WITH ] _option_ [ ... ] ]

这里的 `_option_` 可以是:

SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| 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_ | ALL } [ IN DATABASE _database_name_ ] SET _configuration_parameter_ FROM CURRENT
ALTER ROLE { _name_ | ALL } [ IN DATABASE _database_name_ ] RESET _configuration_parameter_
ALTER ROLE { _name_ | ALL } [ IN DATABASE _database_name_ ] RESET ALL

描述

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

这个命令的第一种形式可以修改很多CREATE ROLE里面声明的角色属性。 (除了增加和删除成员关系的选项之外,所有可能的属性都有介绍;使用GRANTREVOKE可以实现前述两件事。) 没有在命令里提到的属性维持它们以前的设置。数据库超级用户可以给任何角色改变任何设置。 拥有CREATEROLE权限的角色可以修改任意这些设置,但是只能给非超级用户和非复制用户角色设置。 普通的角色只能修改它们自己的口令。

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

其他的形式更改一个角色的会话配置参数默认值,该值要么针对所有的数据库, 要么使用IN DATABASE选项,仅针对指定的数据库。 如果是未指定角色名称而是使用了ALL选项,则所有角色的相关参数都会更改。 当同时使用ALLIN DATABASE选项时,就等同于使用ALTER DATABASE ... SET ...

当角色随后开启一个新会话,指定的值变成了会话的默认值,这些参数值会覆盖任何postgresql.conf中的设置或者从postgres 命令行接收到的参数值。 这仅在登录时发生;执行SET ROLE或者SET SESSION AUTHORIZATION不会引起新的配置值设置。 为所有数据库所设定的参数会被附加到一个角色上的特定数据库的参数所覆盖。为指定数据库或指定角色所设定的参数会覆盖为所有角色设定的参数。

超级用户可以更改任何一个会话默认值。有CREATEROLE权限的角色可以为非超级用户角色更改默认值。 普通的角色只能为自己设置默认值。 某些配置变量不能这样设置,或者只要超级用户才能执行。 只有超级用户才能为所有数据库中的所有角色更改参数设置。

参数

_name_

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

SUPERUSER``NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE CREATEUSER NOCREATEUSER INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION CONNECTION LIMIT _connlimit_ PASSWORD _password_ ENCRYPTED UNENCRYPTED 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 ROLESET SESSION AUTHORIZATION不能进行特定角色的参数设置。

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

注意

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

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

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

也可以把会话缺省参数值与数据库绑定而不是与角色绑定;参阅ALTER DATABASE。 如果有冲突,那么指定角色加数据库的参数设置将覆盖指定角色的参数设置,而后者又可以覆盖指定数据库的参数设置。

例子

改变一个角色的口令:

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, ALTER DATABASE, SET