ALTER ROLE
更新时间:2026-06-24
更改一个数据库角色(用户或组)。
语法
SQL
1 ALTER ROLE name [ [ WITH ] option [ ... ] ]
2
3 其中 option 可以是:
4
5 | CREATEDB | NOCREATEDB
6 | CREATEROLE | NOCREATEROLE
7 | CREATEEXTTABLE | NOCREATEEXTTABLE [ ( attribute='value' [, ...] )
8 where attributes and values are:
9 type='readable'|'writable'
10 protocol='scfs'|'http'
11 | INHERIT | NOINHERIT
12 | LOGIN | NOLOGIN
13 | REPLICATION | NOREPLICATION
14 | CONNECTION LIMIT connlimit
15 | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
16 | VALID UNTIL 'timestamp'
17
18 ALTER ROLE name RENAME TO new_name
19
20 ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
21 ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
22 ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
23 ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET ALL
24 ALTER ROLE name RESOURCE GROUP {group_name | NONE}
25 ```
26
27
28
29## 描述
30
31`ALTER ROLE`更改PalopgMPP数据库角色的属性。此命令有几种变体
32
33 `WITH option`
34 : 修改可以在`CREATE ROLE`中指定的大多数角色属性。 (包含了所有可能的属性,但不包括添加或删除成员身份的选项;为那些选项使用`GRANT` 和 `REVOKE` 。) 在这个命令中没提到的属性将保留她们原来的值。数据库管理员可以为任何角色修改任何设置。 拥有`CREATEROLE` 权限的角色可以修改任意的这些设置,但是仅限于非数据库管理员和非replication角色。普通用户只可以修改自己的密码。
35
36 `RENAME`
37 : 更改角色的名称。数据库管理员可以重命名任何角色。角色有 `CREATEROLE` 权限可以重命名非数据库管理员角色。无法重命名当前会话用户(以其他用户身份连接重命名角色)。因为MD5加密的密码使用角色名称作为密钥,如果密码为MD5加密,则重命名角色将清除其密码。
38
39 `SET | RESET`
40 : 为指定的配置参数更改角色的会话默认值, 对于所有数据库,或者在`IN DATABASE`子句指定数据库时,仅对命名数据库中的会话进行更改。如果指定了all而不是角色名,则会更改所有角色的设置。在`IN DATABASE` 使用`ALL`实际上与使用命令`ALTER DATABASE...SET...`一样。
41
42 每当角色随后启动新会话时,指定的值将成为会话默认值,覆盖服务器配置文件(`palopgsql.conf`)中存在的,或从`postgres`命令行接收到的任何设置。 这只会发生在登录时,执行SET ROLE 或者 SET SESSION AUTHORIZATION 不会触发设置新的值。
43
44 附加到角色的数据库特定设置将覆盖所有数据库的设置。特定数据库或特定角色的设置将覆盖所有角色的设置。
45
46 对于没有`LOGIN`权限的角色,会话默认值无效。普通角色可以更改自己的会话默认值。数据库管理员可以更改任何人的会话默认值。具有`CREATE ROLE`权限的角色可以更改非数据库管理员角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能这样设置,或者只能在数据库管理员发出命令时设置。只有数据库管理员才能更改所有数据库中所有角色的设置。
47
48 `RESOURCE GROUP`
49 : 为角色分配资源组。然后,角色将受制于为资源组配置的并发事务、内存和CPU限制。可以将单个资源组分配给一个或多个角色。不能将为外部组件创建的资源组分配给角色。参考`CREATE RESOURCE GROUP`获取更多信息。
50
51
52
53## 参数
54
55该SQL命令参数说明见下
56
57 `name`
58 : 将被修改属性的角色名。
59
60 `new_name`
61 : 该角色的新名称。
62
63 `database_name`
64 : 将要设置配置参数的数据库名。
65
66 `config_parameter=value`
67 : 将指定配置参数的此角色会话默认值设置为给定值。如果 `value`是`DEFAULT` 指或者指定 `RESET`,则角色的指定参数设置会被删除,角色将在新会话里面继承系统层面的默认值,使用`RESET ALL` 可以清除所有的角色特殊配置。 `SET FROM CURRENT` 保存会话的当前参数值作为角色指定的值。如果指定了`IN DATABASE` ,则只会为指定的角色数据库。当随后角色开启新的会话时,指定的参数值成为会话的默认值,覆盖服务器配置文件(`palopgsql.conf`)中存在的,或从 `postgres`命令行接收到的任何设置。
68
69 角色指定的变量设置只会在登录时生效; `SET ROLE` 和 `SET SESSION AUTHORIZATION`不会处理指定角色的变量设置。
70
71 `group_name`
72 : 分配给该角色的资源组名称。指定`group_name`为 `NONE` 删除角色当前分配的资源组,基于角色的能力分配一个默认资源组。
73
74 数据库管理员角色分配 `admin_group` 资源组,而`default_group` 资源组则分配给非admin角色。
75
76 不能将为外部组件创建的资源组分配给角色。
77
78 `CREATEEXTTABLE | NOCREATEEXTTABLE [(attribute='value')] `
79 : 如果`CREATEEXTTABLE` 被指定, 允许定义的角色创建外部表。如果没被指定,默认`类型`是`readable`,并且默认`协议`是`scfs`。 `NOCREATEEXTTABLE`(默认)拒绝角色有创建外部表的能力。
80 注意使用的外部表`file`或`execute`协议只能由数据库管理员创建。
81
82 `INHERIT | NOINHERIT` \| `LOGIN | NOLOGIN` \| `REPLICATION` \| `NOREPLICATION` \| `CONNECTION LIMIT connlimit` \| `PASSWORD password` \| `ENCRYPTED | UNENCRYPTED` \| `VALID UNTIL 'timestamp' `
83 : 这些子句通过`CREATE ROLE`改变了原来设置的角色属性。
84
85 `DENY deny_point| DENY BETWEEN deny_point AND deny_point`
86 : `DENY`和`DENY BETWEEN`关键字设置了在登录时强制执行的基于时间的约束。`DENY`设置一天或一天的时间来拒绝访问。`DENY BETWEEN`设置访问被拒绝的间隔。 两者都使用以下格式的参数 `deny_point` :
87
88 ``` sql
89 DAY day [ TIME 'time' ]
90 ```
91
92 `deny_point`两部分参数使用以下格式:
93
94 对于 day:
95
96 ``` sql
97 {'Sunday' | 'Monday' | 'Tuesday' |'Wednesday' | 'Thursday' | 'Friday' |
98 'Saturday' | 0-6 }
99 ```
100
101 对于`time:`
102
103 { 00-23 : 00-59 | 01-12 : 00-59 { AM | PM }}
104
105 `DENY BETWEEN`子句使用两种`deny_point`参数。
106
107 ``` sql
108 DENY BETWEEN deny_point AND deny_point
109 ```
110
111 有关基于时间的约束和示例的更多信息,参阅*PalopgMPP数据库管理员指南*中的“管理角色和权限”。
112
113 `DROP DENY FOR deny_point`
114 : 该`DROP DENY FOR`子句从角色中删除基于时间的约束。它使用上述的`deny_point`参数。
115
116
117
118
119
120注意
121: 使用 `CREATE ROLE` 新增角色, 使用`DROP ROLE` 删除角色。
122
123 使用 `GRANT` 和 `REVOKE` 来增加和删除角色成员。
124
125 使用此命令指定未加密的密码时,必须小心。密码将以明文形式发送到服务器,也可能会记录在客户端的命令历史记录或服务器日志中。 该`ssql`命令行客户端包含一个元命令`\password`可用于安全地更改角色的密码。
126
127 还可以将会话默认值与特定数据库而不是角色绑定。如果存在冲突,则特定于角色的设置将覆盖数据库特定的设置。参阅 `ALTER DATABASE`。
128
129
130
131## 示例
132
133更改角色的密码:
134
135 ``` sql
136 ALTER ROLE daria WITH PASSWORD 'passwd123';
137 ```
138
139 删除角色的密码:
140
141 ``` sql
142 ALTER ROLE daria WITH PASSWORD NULL;
143 ```
144
145 更改密码失效日期:
146
147 ``` sql
148 ALTER ROLE scott VALID UNTIL 'May 4 12:00:00 2015 +1';
149 ```
150
151 使密码永久有效:
152
153 ``` sql
154 ALTER ROLE luke VALID UNTIL 'infinity';
155 ```
156
157 赋予角色创建其他角色和新数据库的能力:
158
159 ``` sql
160 ALTER ROLE joelle CREATEROLE CREATEDB;
161 ```
162
163 给角色一个非默认设置`maintenance_work_mem`参数:
164
165 ``` sql
166 ALTER ROLE admin SET maintenance_work_mem = 100000;
167 ```
168
169 给角色一个非默认,指定数据库的参数`client_min_messages` 值:
170
171 ``` sql
172 ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
173 ```
174
175 授予创建可写外部表的角色权限:
176
177 ``` sql
178 ALTER ROLE load CREATEEXTTABLE (type='writable');
179 ```
180
181 更改角色在星期日不允许登录访问:
182
183 ``` sql
184 ALTER ROLE user3 DENY DAY 'Sunday';
185 ```
186
187 改变角色以消除星期日不允许登录访问的约束:
188
189 ``` sql
190 ALTER ROLE user3 DROP DENY FOR DAY 'Sunday';
191 ```
192
193 指定一个新的资源组给角色:
194
195 ``` sql
196 ALTER ROLE parttime_user RESOURCE GROUP rg_light;
197 ```
198
199
200
201兼容性说明
202: `ALTER ROLE` 语句是 PalopgMPP 数据库的扩展
203
204
205
206相关SQL命令
207: `CREATE ROLE`, `DROP ROLE`, `ALTER DATABASE`, `SET`, `CREATE RESOURCE GROUP`, `GRANT`, `REVOKE`
评价此篇文章
