ALTER ROLE — 更改数据库角色
ALTER ROLErole_specification
[ WITH ]option
[ ... ] whereoption
can 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 ROLEname
RENAME TOnew_name
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
FROM CURRENT ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESETconfiguration_parameter
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESET ALL whererole_specification
can 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
替换角色名,这将更改所有角色的设置。在 IN DATABASE
中使用 ALL
实际上等同于使用命令 ALTER DATABASE ... SET ...
。
之后,当角色开始新的会话时,指定的 value
将成为会话默认值,覆盖 postgresql.conf
中的任何设置或从 postgres
命令行接收到的设置。这仅在登录时发生;执行 SET ROLE
或 SET SESSION AUTHORIZATION
不会触发新的配置值设置。为所有数据库设置的值会被附加到角色上的数据库特定设置覆盖。特定数据库或特定角色的设置会覆盖所有角色的设置。
超级用户可以更改任何人的会话默认值。拥有 CREATEROLE
权限的角色可以更改他们已授予 ADMIN OPTION
的非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量无法通过这种方式设置,或者只有在超级用户发出命令时才能设置。只有超级用户可以更改所有数据库中所有角色的设置。
name
#要更改属性的角色名称。
CURRENT_ROLE
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
#将此角色的指定配置参数的会话默认值设置为给定值。如果 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 的一个扩展。
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 来报告文档问题。