PostgreSQL 更改角色

在本教程中,您将学习如何使用 PostgreSQL ALTER ROLE 语句修改角色的属性、重命名角色以及更改角色的会话默认配置变量。

摘要:在本教程中,您将学习如何使用 PostgreSQL ALTER ROLE 语句修改角色的属性、重命名角色以及更改角色的会话默认配置变量。

使用PostgreSQL ALTER ROLE 修改角色属性

要更改角色的属性,请使用以下 ALTER ROLE 语句形式:

ALTER ROLE role_name [WITH] option;

该选项可以是:

  • SUPERUSER | NOSUPERUSER – 确定角色是否为 a superuser 。
  • CREATEDB | NOCREATEDB – 允许角色创建新数据库。
  • CREATEROLE | NOCREATEROLE – 允许角色创建或更改角色。
  • INHERIT | NOINHERIT – 确定角色是否继承其所属角色的权限。
  • LOGIN | NOLOGIN – 允许角色登录。
  • REPLICATION | NOREPLICATION – 确定角色是否为复制角色。
  • BYPASSRLS | NOBYPASSRLS – 确定角色是否通过行级安全 (RLS) 策略。
  • CONNECTION LIMIT limit – 指定角色可以建立的并发连接数,-1 表示无限制。
  • PASSWORD 'password' | PASSWORD NULL – 更改角色的密码。
  • VALID UNTIL 'timestamp' – 设置角色密码失效的日期和时间。

应用以下规则:

  • 超级用户可以更改任何角色的任何这些属性。
  • 具有该 CREATEROLE 属性的角色只能为非超级用户和非复制角色更改这些属性中的任何一个。
  • 序数角色只能更改其密码。

首先,使用 postgres 角色登录PostgreSQL 。

其次,使用以下语句创建一个名为的新角色: calf CREATE ROLE

create role calf login password 'securePwd1';

该 calf 角色可以使用密码登录。

因为 postgres 是超级用户,所以可以把角色改成 calf 超级用户:

alter role calf superuser;

查看 calf psql交互程序中的角色,使用 \du 如下命令:

\du calf

输出:

List of roles Role name | Attributes | Member of -----------+------------+----------- calf | Superuser | {}

以下语句将角色的密码设置为 calf 在 结束之前过期 2050 :

alter role calf
valid until '2050-01-01';

使用 \du 命令查看效果:

\du calf

输出:

List of roles Role name | Attributes | Member of -----------+---------------------------------------------+----------- calf | Superuser +| {} | Password valid until 2050-01-01 00:00:00-08 |

使用 PostgreSQL ALTER ROLE 重命名角色

要更改角色的名称,请使用以下 ALTER ROLE 语句形式:

ALTER ROLE role_name
TO new_name;

在此语法中,您在 ALTER ROLE 关键字后指定角色名称,并在关键字后指定角色的新名称 TO 。

超级用户可以重命名任何角色。具有 CREATEROLE 特权的角色可以重命名非超级用户角色。

如果使用角色登录PostgreSQL数据库服务器,在当前会话中重命名,会报错:

ERROR:  session user cannot be renamed

在这种情况下,您需要使用不同的角色连接到 PostgreSQL 数据库服务器以重命名该角色。

您从 postgres ’ 会话执行以下语句以将角色重命名 calf 为 elephant :

ALTER ROLE calf
RENAME TO elephant;

使用 PostgreSQL ALTER ROLE 更改配置变量的角色会话默认值

以下 ALTER ROLE 语句更改配置变量的角色会话默认值:

ALTER ROLE role_name | CURRENT_USER | SESSION_USER | ALL
[IN DATABASE database_name]
SET configuration_param = { value | DEFAULT }

在这个语法中:

  • 首先,指定要修改角色会话默认值的角色名称,或使用 CURRENT_USER , 或 SESSION_USER 。您可以使用该 ALL 选项来更改所有角色的设置。
  • 其次,在 IN DATABASE 关键字后指定一个数据库名称,以便仅对指定数据库中的会话进行更改。如果省略该 IN DATABASE 子句,则更改将应用​​于所有数据库。
  • 第三,在子句中指定配置参数和新值 SET 。

超级用户可以更改任何角色的会话默认值。具有该 CREATEROLE 属性的角色可以为非超级用户角色设置默认值。普通角色只能为自己设置默认值。只有超级用户才能更改所有数据库中所有角色的设置。

以下示例使用 为 ALTER ROLE 角色大象提供参数的非默认数据库特定设置 client_min_messages :

ALTER ROLE elephant 
IN DATABASE dvdrental 
SET client_min_messages = NOTICE;

概括

  • 使用 ALTER ROLE role_name option 修改角色的属性。
  • 使用 ALTER ROLE role_name RENAME TO new_role 语句重命名角色。
  • 使用 ALTER ROLE role_name SET param=value 语句更改配置变量的角色会话默认值。