Postgresql 中文操作指南
Synopsis
ALTER ROLE role_specification [ WITH ] option [ ... ]
where option can be:
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
where role_specification can be:
role_name
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER
Description
ALTER ROLE 更改 PostgreSQL 角色的属性。
在概要中列出的此命令的第一个变体可以更改 CREATE ROLE 中可以指定的角色属性(涵盖了所有可能的属性,但没有添加或删除成员资格的选项;请使用 GRANT 和 REVOKE )。命令中未提及的属性保留其以前的设置。数据库超级用户可以为任何角色更改其中任何设置。具有 CREATEROLE 权限的非超级用户角色可以更改大多数这些属性,但只能针对已向其授予 ADMIN OPTION 的非超级用户和非复制角色进行更改。非超级用户不能更改 SUPERUSER 属性,只有在他们拥有对应的属性时,才能更改 CREATEDB 、 REPLICATION 和 BYPASSRLS 属性。普通角色只能更改他们自己的密码。
第二个变体更改角色的名称。数据库超级用户可以重命名任何角色。具有 CREATEROLE 权限的角色可以重新命名已向其授予 ADMIN OPTION 的非超级用户角色。当前会话用户不能被重命名。(与另一个用户建立连接,如果您需要这样做的话)。因为 MD5 加密密码使用角色名称作为加密 salt,因此如果密码是 MD5 加密,重命名一个角色将清除其密码。
其余变体更改角色的配置变量会话默认值,无论针对所有数据库还是在指定 IN DATABASE 子句时,仅针对指定数据库中的会话进行更改。如果指定 ALL 而不是角色名称,这将更改所有角色的设置。将 ALL 与 IN DATABASE 一起使用实际上与使用命令 ALTER DATABASE … SET … 相同。
无论何时角色随后开始一个新的会话,指定的值就会成为会话默认值,覆盖 postgresql.conf 中存在的任何设置或从 postgres 命令行接收的任何设置。这仅在登录时发生;执行 SET ROLE 或 SET SESSION AUTHORIZATION 不会导致设置新的配置值。针对所有数据库设置的设置将被附加到角色的特定数据库设置覆盖。特定数据库或特定角色的设置将覆盖所有角色的设置。
超级用户可以更改任何人的会话默认值。具有 CREATEROLE 权限的角色可以更改已向其授予 ADMIN OPTION 的非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能按此方式设置,或者只有在超级用户发布命令时才能设置。只有超级用户可以更改所有数据库中所有角色的设置。
Parameters
-
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 不处理特定于角色的变量设置。
-
请参阅 SET 和 Chapter 20 以获取有关允许的参数名称和值的详细信息。
-
Notes
使用 CREATE ROLE 添加新角色,使用 DROP ROLE 删除角色。
使用此命令指定未加密密码时必须谨慎。此密码将以纯文本形式传输至服务器,且也可能记录于客户端命令历史记录或服务器日志中。 psql 中包含一个命令 \password ,可以使用该命令来更改角色密码且不暴露纯文本密码。
也可以将会话默认值绑定到特定数据库,而不是角色;请参阅 ALTER DATABASE 。如果有冲突,则特定于数据库角色的设置将覆盖特定于角色的设置,而后者又将覆盖特定于数据库的设置。
Examples
更改角色密码:
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
删除角色密码:
ALTER ROLE davide WITH PASSWORD NULL;
更改密码有效期,指定密码应于 2015 年 5 月 4 日中午(UTC+1 小时时区)过期:
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;