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 ...
相同。
角色随后每次启动新会话时,指定的这个值都会成为该会话的默认值,该值将覆盖 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
#角色的新名称。
数据库名称
#应在哪设置配置变量的数据库名称。
配置参数
值
#将此角色对给定配置参数的会话默认值设置到指定的值。如果值
是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;
用比UTC:
ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';
提前 1 小时的时区,将密码过期日期更改为 2015 年 5 月 4 日中午
ALTER ROLE fred VALID UNTIL 'infinity';
让密码永久有效
ALTER ROLE miriam CREATEROLE CREATEDB;
授予角色管理其他角色和创建新数据库的能力
ALTER ROLE worker_bee SET maintenance_work_mem = 100000;
授予角色非默认设置 maintenance_work_mem 参数
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
兼容性
ALTER ROLE
语句是 PostgreSQL 扩展。