ALTER ROLE — 更改数据库角色
ALTER ROLErole_specification[ WITH ]option[ ... ] whereoptioncan be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' ALTER ROLEnameRENAME TOnew_nameALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] SETconfiguration_parameter{ TO | = } {value| DEFAULT } ALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] SETconfiguration_parameterFROM CURRENT ALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] RESETconfiguration_parameterALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] RESET ALL whererole_specificationcan be:role_name| CURRENT_ROLE | CURRENT_USER | SESSION_USER
ALTER ROLE 更改 PostgreSQL 角色的属性。
概要中列出的此命令的第一个变体可以更改许多可以在 CREATE ROLE 中指定的角色属性。(涵盖了所有可能的属性,除了没有添加或删除成员资格的选项;使用 GRANT 和 REVOKE 来执行此操作。)命令中未提及的属性将保留其先前的设置。数据库超级用户可以更改任何角色的任何这些设置,但更改 引导超级用户的 SUPERUSER 属性除外。具有 CREATEROLE 权限的非超级用户角色可以更改大多数这些属性,但只能针对已授予 ADMIN OPTION 的非超级用户和非复制角色。非超级用户无法更改 SUPERUSER 属性,并且只有当他们自己拥有相应的属性时才能更改 CREATEDB、REPLICATION 和 BYPASSRLS 属性。普通角色只能更改自己的密码。
第二个变体更改角色的名称。数据库超级用户可以重命名任何角色。具有 CREATEROLE 权限的角色可以重命名已授予 ADMIN OPTION 的非超级用户角色。当前会话用户无法被重命名。(如果需要这样做,请以其他用户身份连接。)由于 MD5 加密的密码使用角色名称作为加密盐值,因此如果密码是 MD5 加密的,则重命名角色会清除其密码。
其余变体更改配置变量的角色会话默认值,可以针对所有数据库,或者,当指定 IN DATABASE 子句时,仅针对指定数据库中的会话。如果指定 ALL 而不是角色名称,则会更改所有角色的设置。将 ALL 与 IN DATABASE 一起使用实际上与使用命令 ALTER DATABASE ... SET ... 相同。
每当角色随后启动新会话时,指定的值将成为会话默认值,覆盖 postgresql.conf 中存在的任何设置或从 postgres 命令行接收到的设置。这仅发生在登录时;执行 SET ROLE 或 SET SESSION AUTHORIZATION 不会导致设置新的配置值。为所有数据库设置的设置将被附加到角色的数据库特定设置覆盖。特定数据库或特定角色的设置将覆盖所有角色的设置。
超级用户可以更改任何人的会话默认值。具有 CREATEROLE 权限的角色可以更改已授予 ADMIN OPTION 的非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能以这种方式设置,或者只能在超级用户发出命令时设置。只有超级用户才能更改所有数据库中所有角色的设置。
name #要更改其属性的角色的名称。
CURRENT_ROLECURRENT_USER #更改当前用户而不是显式标识的角色。
SESSION_USER #更改当前会话用户而不是显式标识的角色。
SUPERUSERNOSUPERUSERCREATEDBNOCREATEDBCREATEROLENOCREATEROLEINHERITNOINHERITLOGINNOLOGINREPLICATIONNOREPLICATIONBYPASSRLSNOBYPASSRLSCONNECTION LIMIT connlimitENCRYPTED ] PASSWORD 'password'PASSWORD NULLVALID UNTIL 'timestamp' #这些子句更改最初由 CREATE ROLE 设置的属性。有关详细信息,请参阅 CREATE ROLE 参考页面。
new_name #角色的新名称。
database_name #应在其中设置配置变量的数据库的名称。
configuration_parametervalue #将此角色的指定配置参数的会话默认值设置为给定值。如果 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;
ALTER ROLE 语句是 PostgreSQL 的扩展。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表单报告文档问题。