九月 12, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的ALTER ROLE
语句修改角色的属性、重命名角色以及更改配置变量的角色会话默认值。
目录
使用 ALTER ROLE 修改角色属性
要更改角色的属性,请使用以下形式的ALTER ROLE
语句:
ALTER ROLE role_name [WITH] option;
该选项可以是:
SUPERUSER
|NOSUPERUSER
– 确定该角色是否为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。
其次,使用CREATE ROLE
语句,创建一个新角色,名为calf
:
create role calf login password 'securePwd1';
该calf
角色可以使用密码登录。
因为postgres
是超级用户,所以可以将角色calf
更改为超级用户:
alter role calf superuser;
要在psql
交互程序中查看角色calf
,可以使用以下的\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 |
使用 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;
使用 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
语句为角色elephant
提供非默认的、特定于数据库的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
语句更改配置变量的角色会话默认值。