CREATE ROLE
更新时间:2026-06-25
CREATE ROLE
定义一个新的数据库角色(用户或组)。
语法
SQL
1 CREATE ROLE name [[WITH] option [ ... ]]
2 ```
3
4 其中`option`可以是:
5
6 ``` sql
7 | CREATEDB | NOCREATEDB
8 | CREATEROLE | NOCREATEROLE
9 | CREATEUSER | NOCREATEUSER
10 | CREATEEXTTABLE | NOCREATEEXTTABLE
11 [ ( attribute='value'[, ...] ) ]
12 where attributes and value are:
13 type='readable'|'writable'
14 protocol='scfs'|'http'
15 | INHERIT | NOINHERIT
16 | LOGIN | NOLOGIN
17 | REPLICATION | NOREPLICATION
18 | CONNECTION LIMIT connlimit
19 | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
20 | VALID UNTIL 'timestamp'
21 | IN ROLE rolename [, ...]
22 | ROLE rolename [, ...]
23 | ADMIN rolename [, ...]
24 | USER rolename [, ...]
25 | SYSID uid [, ...]
26 | RESOURCE GROUP group_name
27 | [ DENY deny_point ]
28 | [ DENY BETWEEN deny_point AND deny_point]
29 ```
30
31
32
33## 描述
34
35`CREATE ROLE`在PalopgMPP数据库系统中添加了新角色。 角色是可以拥有数据库对象并具有数据库权限的实体。根据角色的使用方式,可以将角色视为用户,组或两者。
36
37 必须具有`CREATE ROLE`权限或是数据库管理员才能使用此命令。
38
39 请注意,角色是在系统级别定义的,并且对于PalopgMPP数据库系统中的所有数据库均有效。
40
41
42
43## 参数
44
45该SQL命令参数说明见下
46
47 `name`
48 : 新角色的名称。
49
50 `CREATEDB` \| `NOCREATEDB`
51 : 如果指定了`CREATEDB`,将允许所定义的角色创建新数据库。 `NOCREATEDB`(默认值)将使角色无法创建数据库。
52
53 `CREATEROLE` \| `NOCREATEROLE`
54 : 如果指定了`CREATEROLE`,则允许定义的角色创建新角色,更改其他角色和删除其他角色。`NOCREATEROLE`(默认值)将拒绝角色创建新角色或修改其他角色。
55
56 `CREATEUSER` \|`NOCREATEUSER`
57 : 这些子句已经过时。请注意,它们不等同于`CREATEROLE`和`NOCREATEROLE`子句。
58
59 `CREATEEXTTABLE` \| `NOCREATEEXTTABLE`
60 : 如果指定了`CREATEEXTTABLE`,则允许定义的角色创建外部表。如果未指定,则默认`type`为`readable`,默认`protocol`为`scfs`。有效类型为`scfs`,`scfs`,`http`和`https`。
61
62 `NOCREATEEXTTABLE`(默认类型)拒绝该角色创建外部表。
63
64 请注意,使用`file`或`execute`协议的外部表只能由数据库管理员创建。
65
66 使用`GRANT...ON PROTOCOL`命令允许用户创建和使用具有自定义协议类型的外部表,包括PalopgMPP数据库附带的`s3`和`pxf`协议。
67
68 `INHERIT` \| `NOINHERIT`
69 : 如果指定了该属性,则`INHERIT`(默认设置)允许该角色使用为其直接或间接所属的所有角色授予的任何数据库权限。
70
71 使用`NOINHERIT`时,另一个角色的成员资格仅授予`SET ROLE`权限给该另一个角色。
72
73 `LOGIN` \| `NOLOGIN`
74 : 如果指定,则`LOGIN`允许角色登录数据库。 可以将具有`LOGIN`属性的角色视为用户。具有`NOLOGIN`的角色对于管理数据库权限很有用,并且可以视为组。
75
76 如果未指定,则`NOLOGIN`为默认值, 除非`CREATE ROLE`通过其替代拼写`CREATE USER`被调用时。
77
78 `REPLICATION` \| `NOREPLICATION`
79 : 这些子句确定是允许角色启动流复制还是使系统进入和退出备份模式。具有`REPLICATION`属性的角色是具有很高权限的角色,并且仅应在实际用于复制的角色上使用。如果未指定,则`NOREPLICATION`是默认值。
80
81 `CONNECTION LIMIT connlimit`
82 : 此角色可以建立的并发连接的最大数量。默认值-1表示没有限制。
83
84 `PASSWORD password`
85 : 使用`LOGIN`属性设置角色的用户密码。 如果您不打算使用密码身份验证,则可以忽略此选项。如果未指定密码,则密码将设置为null,并且该用户的密码身份验证将始终失败。
86
87 空密码可以有选择地显式写为`PASSWORD NULL`。
88
89 `ENCRYPTED` \| `UNENCRYPTED`
90 : 这些关键字控制密码是否以加密方式存储在系统catalog中。(如果未指定,则默认行为由配置参数`password_encryption`决定。)
91
92 如果显示的密码字符串已经采用MD5加密格式,则将按原样存储加密,而不管是否指定了`ENCRYPTED`或`UNENCRYPTED`(因为系统无法解密指定的加密密码字符串)。这允许在转储/还原期间重新加载加密的密码。
93
94 `VALID UNTIL 'timestamp'`
95 : VALID UNTIL子句设置日期和时间,之后该角色的密码将不再有效。 如果省略此子句,密码将永不过期。
96
97 `IN ROLE rolename`
98 : 将新角色添加为命名角色的成员。 请注意,没有任何选项可以将新角色添加为管理员。 使用单独的`GRANT`命令来执行此操作。
99
100 `ROLE rolename`
101 : 将命名角色添加为该角色的成员,从而使该新角色成为一个组。
102
103 `ADMIN rolename`
104 : `ADMIN`子句类似于`ROLE`, 但是被提及的角色被使用`WITH ADMIN OPTION`加入到新角色中,从而赋予他们将这个角色的成员资格授予其他人的权利。
105
106 `RESOURCE GROUP group_name`
107 : 要分配给新角色的资源组的名称。 该角色将受限于资源组配置的并发事务,内存和CPU限制。 您可以将一个资源组分配给一个或多个角色。
108
109 如果未为新角色指定资源组,则会自动为该角色分配角色的默认资源组, 为数据库管理员角色分配`admin_group`,为非管理员角色分配`default_group`。
110
111 可以将`admin_group`资源组分配给具有数据库管理员属性的任何角色。可以将`default_group`资源组分配给任何角色。不能将为外部组件创建的资源组分配给角色。
112
113 `DENY deny_point` \| `DENY BETWEEN deny_point AND deny_point`
114 : `DENY`和`DENY BETWEEN`关键字设置在登录时强制执行的基于时间的约束。 `DENY`设置拒绝访问的日期或日期和时间。
115
116 `DENY BETWEEN`设置一个拒绝访问的时间间隔。 两者都使用具有以下格式的参数`deny_point`:
117
118 ``` sql
119 DAY day [ TIME 'time' ]
120 ```
121
122 `deny_point`参数的两个部分使用以下格式:
123
124 * 对于`day`:
125
126 ``` sql
127 {'Sunday' | 'Monday' | 'Tuesday' |'Wednesday' | 'Thursday' | 'Friday' |
128 'Saturday' | 0-6 }
129 ```
130
131 * 对于`time`:
132
133 ``` sql
134 { 00-23 : 00-59 | 01-12 : 00-59 { AM | PM }}
135 ```
136
137 `DENY BETWEEN`子句使用两个`deny_point`参数:
138
139 ``` sql
140 DENY BETWEEN deny_point AND deny_point
141 ```
142
143
144
145
146注解
147: 添加和删除角色成员(管理组)的首选方法是使用`GRANT`和`REVOKE`。
148
149 `VALID UNTIL`子句仅为密码而不是角色定义过期时间。 使用非基于密码的身份验证方法登录时,不会强制使用到期时间。
150
151 `INHERIT`属性控制可授予权限(数据库对象和角色成员的访问权限)的继承。 它不适用于由`CREATE ROLE`和`ALTER ROLE`设置的特殊角色属性。 例如,即使设置了`INHERIT`,具有`CREATEDB`权限的角色成员也不会立即授予创建数据库的能力。这些权限/属性永远不会被继承: `CREATEDB`,`CREATEROLE`,`CREATEEXTTABLE`,`LOGIN`,`RESOURCE GROUP`。
152
153 必须在每个用户级角色上设置属性。
154
155 由于向后兼容,`INHERIT`属性是默认属性。 在以前的PalopgMPP数据库版本中,用户始终可以访问其所属组的所有权限。但是,`NOINHERIT`提供与SQL标准中指定的语义更接近的匹配。
156
157 使用`CREATEROLE`权限时要小心。 对于`CREATEROLE`-role的权限,没有继承的概念。这意味着,即使一个角色没有特定的权限,但被允许创建其他角色,它也可以轻松地创建另一个角色,而该角色的权限不同于其自己的角色(创建具有数据库管理员权限的角色除外)。例如,如果角色具有`CREATEROLE`权限,但没有`CREATEDB`权限,则它可以使用`CREATEDB`权限创建新角色。因此,将具有`CREATEROLE`权限的角色视为几乎数据库管理员角色。
158
159 数据库管理员绝不执行`CONNECTION LIMIT`选项。
160
161 使用此命令指定未加密的密码时必须小心。 密码将以明文形式传输到服务器,并且也可能会记录在客户端的命令历史记录或服务器日志中。但是,客户端程序`createuser`传输加密的密码。另外,ssql包含命令`\password`,可用于稍后安全地更改密码。
162
163
164
165## 示例
166
167创建一个可以登录但不提供密码的角色:
168
169 ``` sql
170 CREATE ROLE jonathan LOGIN;
171 ```
172
173 使用有效期至2016年底的密码创建角色 (`CREATE USER`与`CREATE ROLE`相同,只不过它暗含了`LOGIN`):
174
175 ``` sql
176 CREATE USER joelle WITH PASSWORD 'jw8s0F4' VALID UNTIL '2017-01-01';
177 ```
178
179 创建一个可以创建数据库并管理其他角色的角色:
180
181 ``` sql
182 CREATE ROLE admin WITH CREATEDB CREATEROLE;
183 ```
184
185 创建一个角色,该角色在星期日不允许登录访问:
186
187 ``` sql
188 CREATE ROLE user3 DENY DAY 'Sunday';
189 ```
190
191 创建一个可以创建类型为'scfs'的可读可写外部表的角色:
192
193 ``` sql
194 CREATE ROLE jan WITH CREATEEXTTABLE(type='readable', protocol='scfs')
195 CREATEEXTTABLE(type='writable', protocol='scfs');
196 ```
197
198 创建一个角色,分配一个资源组:
199
200 ``` sql
201 CREATE ROLE bill RESOURCE GROUP rg_light;
202 ```
203
204
205
206兼容性说明
207: SQL标准定义了用户和角色的概念,但是将它们视为不同的概念,并将所有定义用户的命令留给数据库实现指定。
208
209 在PalopgMPP数据库中,用户和角色被统一为单一类型的对象。因此,角色具有比标准中更多的可选属性。
210
211 `CREATE ROLE`在SQL标准中,但是该标准仅需要以下语法:
212
213 ``` sql
214 CREATE ROLE name [WITH ADMIN rolename]
215 ```
216
217 PalopgMPP数据库扩展是允许多个初始管理员,以及`CREATE ROLE`的所有其他选项。
218
219 通过为用户提供`NOINHERIT`属性, 而为角色赋予`INHERIT`属性,可以最接近地逼近SQL标准指定的行为。
220
221
222
223相关SQL命令
224: `SET ROLE`, `ALTER ROLE`, `DROP ROLE`, `GRANT`, `REVOKE`, `CREATE RESOURCE GROUP`
评价此篇文章
