ALTER ROLE
ALTER ROLE - 更改数据库角色
语法格式
ALTER ROLE role_specification [ WITH ] option [ ... ]
其中option可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
| VALID UNTIL 'timestamp'
ALTER ROLE name RENAME TO new_name
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL
其中role_specification可以是:
role_name
| CURRENT_USER
| SESSION_USER
说明
ALTER ROLE 更改Vastbase E100角色的属性。
语法格式中列出的此命令的第一个变体可以更改可在 CREATE ROLE中指定的许多角色属性。(除了没有添加或删除成员资格的选项之外,所有可能的属性都被覆盖;请使用GRANT和 REVOKE。)命令中未提及的属性保留其先前的设置。数据库超级用户可以为任何角色更改任何这些设置。具有CREATEROLE权限的角色可以更改任何这些设置,但仅适用于非超级用户和非复制角色。普通角色只能更改自己的密码。
第二个变体更改角色的名称。数据库超级用户可以重命名任何角色。具有CREATEROLE 权限的角色可以重命名非超级用户角色。无法重命名当前会话用户。(如果需要,请以其他用户身份进行连接。)由于 MD5加密密码使用角色名称作为加密盐,因此如果密码为 MD5-encrypted,则重命名角色会清除其密码。
其余变体更改配置变量的角色会话缺省值,对于所有数据库,或者在指定 IN DATABASE 子句时,仅针对指定数据库中的会话。如果指定 ALL而不是角色名称,则会更改所有角色的设置。运用 ALL 与 IN DATABASE实际上与使用命令 ALTER DATABASE … SET … 相同。
每当角色随后启动新会话时,指定的值将成为会话默认值,覆盖 postgresql.conf中存在的任何设置或已从 postgres 命令行接收的设置。这只发生在登录时;执行SET ROLE或 SET SESSION AUTHORIZATION不会导致设置新的配置值。为所有数据库设置的设置将由附加到角色的特定于数据库的设置覆盖。特定数据库或特定角色的设置会覆盖所有角色的设置。
超级用户可以更改任何人的会话默认值。具有 CREATEROLE权限的角色可以更改非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能以这种方式设置,或者只能在超级用户发出命令时设置。只有超级用户才能更改所有数据库中所有角色的设置。
参数说明
name
要更改其属性的角色的名称。
CURRENT_USER
更改当前用户而不是显式标识的角色。
SESSION_USER
更改当前会话用户而不是显式标识的角色。
SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT connlimit
[ ENCRYPTED ] PASSWORD ' password '
PASSWORD NULL
VALID UNTIL ' timestamp ' 这些子句改变了最初由 CREATE ROLE设置的属性。有关更多信息,请参阅CREATE ROLE 参考页面。
new_name
角色的新名称。
database_name
应在其中设置配置变量的数据库的名称。
configuration_parameter
将指定配置参数说明的此角色的会话缺省值设置为给定值。如果 value 是DEFAULT 或等效地使用了 RESET,则会删除特定于角色的变量设置,因此该角色将在新会话中继承系统范围的默认设置。使用RESET ALL 清除所有特定于角色的设置。 SET FROM CURRENT 将会话的当前参数说明值保存为特定于角色的值。如果指定了 IN DATABASE,则仅为给定角色和数据库设置或删除配置参数说明。
特定于角色的变量设置仅在登录时生效; [SET ROLE和 [SET SESSION AUTHORIZATION不处理特定于角色的变量设置。
注意事项
使用 CREATE ROLE 添加新角色,使用 DROP ROLE 删除角色。
ALTER ROLE 无法更改角色的成员资格。使用 GRANT和 REVOKE来做到这一点。
使用此命令指定未加密的密码时必须小心。密码将以明文形式传输到服务器,也可能记录在客户端的命令历史记录或服务器日志中。 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;