Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

ALTER ROLE

ALTER ROLE — 更改数据库角色

语法

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

描述

ALTER ROLE 更改 PostgreSQL 角色的属性。

概要中列出的此命令的第一种变量可以更改可以在 CREATE ROLE 中指定的许多角色属性。(涵盖所有可能存在的属性,但没有添加或删除成员资格的选项;为此,请使用 GRANTREVOKE。)命令中未提及的属性将保留其之前的设置。数据库超级用户可以为任何角色更改任何这些设置,但不能更改 启动超级用户SUPERUSER 属性。具有 CREATEROLE 权限的非超级用户角色可以更改大多数这些属性,但只能针对已为其授予 ADMIN OPTION 的非超级用户和非复制角色进行更改。非超级用户无法更改 SUPERUSER 属性,并且只能在他们自己拥有相应属性的情况下更改 CREATEDBREPLICATIONBYPASSRLS 属性。普通角色只能更改其自己的密码。

第二个变量更改角色的名称。数据库超级用户可以重命名任何角色。拥有 CREATEROLE 权限的角色可以重命名已为其授予 ADMIN OPTION 的非超级用户角色。当前会话用户无法重命名。(如果您需要这样做,请以不同的用户身份连接。)因为 MD5 加密密码使用角色名称作为加密盐,所以重命名角色会在密码为 MD5 加密的情况下清除其密码。

剩余的变量更改角色的会话默认值以用于配置变量,或者针对所有数据库,或者在指定 IN DATABASE 子句时,仅针对指定数据库中的会话。如果指定 ALL 而不是角色名称,则这会更改所有角色的设置。对 IN DATABASE 使用 ALL 实际上与使用命令 ALTER DATABASE ... SET ... 相同。

角色随后每次启动新会话时,指定的这个值都会成为该会话的默认值,该值将覆盖 postgresql.conf 中的设置或从 postgres 命令行接收到的设置。这种覆盖只在登录时发生;执行 SET ROLESET 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 #

角色的新名称。

数据库名称 #

应在哪设置配置变量的数据库名称。

配置参数
#

将此角色对给定配置参数的会话默认值设置到指定的值。如果DEFAULTRESET,则移除角色特定的变量设置,因此角色将继承新建会话时的系统范围的默认设置。使用RESET ALL清除所有角色特定设置。SET FROM CURRENT将参数的会话当前值保存为角色特定值。如果指定IN DATABASE,则仅针对给定角色和数据库设置或删除配置参数。

角色特定变量设置仅在登录时生效;SET ROLESET SESSION AUTHORIZATION不处理角色特定变量设置。

有关允许的参数名称和值,请参阅SET第 19 章

备注

使用CREATE ROLE添加新角色,使用DROP ROLE删除角色。

ALTER ROLE无法更改角色的成员资格。使用GRANTREVOKE进行更改。

在此命令中指定未加密密码时,必须小心。密码将以纯文本形式传输到服务器,并且也可能会记录在客户端的命令历史记录或服务器日志中。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;

授予角色特定于数据库的非默认 client_min_messages 参数设置

兼容性

ALTER ROLE 语句是 PostgreSQL 扩展。

另请参见