CREATE ROLE
CREATE ROLE¶
定义一个新的数据库角色(用户或组)。
- 语法
- ``` sql
CREATE ROLE name [[WITH] option [ … ]]
其中`option`可以是: ``` sql SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | CREATEEXTTABLE | NOCREATEEXTTABLE [ ( attribute='value'[, ...] ) ] where attributes and value are: type='readable'|'writable' protocol='scfs'|'http' | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp' | IN ROLE rolename [, ...] | ROLE rolename [, ...] | ADMIN rolename [, ...] | USER rolename [, ...] | SYSID uid [, ...] | RESOURCE GROUP group_name | [ DENY deny_point ] | [ DENY BETWEEN deny_point AND deny_point] - 描述
-
CREATE ROLE在SeaboxMPP数据库系统中添加了新角色。 角色是可以拥有数据库对象并具有数据库权限的实体。根据角色的使用方式,可以将角色视为用户,组或两者。必须具有
CREATE ROLE权限或是数据库超级用户才能使用此命令。请注意,角色是在系统级别定义的,并且对于SeaboxMPP数据库系统中的所有数据库均有效。
- 参数
-
该SQL命令参数说明见下
name- 新角色的名称。
SUPERUSER|NOSUPERUSER-
如果指定了
SUPERUSER,则定义的角色将是超级用户,该超级用户可以覆盖数据库中的所有访问限制。超级用户状态很危险,应仅在真正需要时使用。
必须自己是超级用户才能创建新的超级用户。 默认值为
NOSUPERUSER。 CREATEDB|NOCREATEDB- 如果指定了
CREATEDB,将允许所定义的角色创建新数据库。NOCREATEDB(默认值)将使角色无法创建数据库。 CREATEROLE|NOCREATEROLE- 如果指定了
CREATEROLE,则允许定义的角色创建新角色,更改其他角色和删除其他角色。NOCREATEROLE(默认值)将拒绝角色创建新角色或修改其他角色。 CREATEUSER|NOCREATEUSER- 这些子句已经过时,但仍然被
SUPERUSER和NOSUPERUSER的拼写接受。请注意,它们不等同于CREATEROLE和NOCREATEROLE子句。 CREATEEXTTABLE|NOCREATEEXTTABLE-
如果指定了
CREATEEXTTABLE,则允许定义的角色创建外部表。如果未指定,则默认type为readable,默认protocol为scfs。有效类型为scfs,scfs,http和https。NOCREATEEXTTABLE(默认类型)拒绝该角色创建外部表。请注意,使用
file或execute协议的外部表只能由超级用户创建。使用
GRANT...ON PROTOCOL命令允许用户创建和使用具有自定义协议类型的外部表,包括SeaboxMPP数据库附带的s3和pxf协议。 INHERIT|NOINHERIT-
如果指定了该属性,则
INHERIT(默认设置)允许该角色使用为其直接或间接所属的所有角色授予的任何数据库权限。使用
NOINHERIT时,另一个角色的成员资格仅授予SET ROLE权限给该另一个角色。 LOGIN|NOLOGIN-
如果指定,则
LOGIN允许角色登录数据库。 可以将具有LOGIN属性的角色视为用户。具有NOLOGIN的角色对于管理数据库权限很有用,并且可以视为组。如果未指定,则
NOLOGIN为默认值, 除非CREATE ROLE通过其替代拼写CREATE USER被调用时。 REPLICATION|NOREPLICATION- 这些子句确定是允许角色启动流复制还是使系统进入和退出备份模式。具有
REPLICATION属性的角色是具有很高权限的角色,并且仅应在实际用于复制的角色上使用。如果未指定,则NOREPLICATION是默认值。 CONNECTION LIMIT connlimit- 此角色可以建立的并发连接的最大数量。默认值-1表示没有限制。
PASSWORD password-
使用
LOGIN属性设置角色的用户密码。 如果您不打算使用密码身份验证,则可以忽略此选项。如果未指定密码,则密码将设置为null,并且该用户的密码身份验证将始终失败。空密码可以有选择地显式写为
PASSWORD NULL。 ENCRYPTED|UNENCRYPTED-
这些关键字控制密码是否以加密方式存储在系统catalog中。(如果未指定,则默认行为由配置参数
password_encryption决定。)如果显示的密码字符串已经采用MD5加密格式,则将按原样存储加密,而不管是否指定了
ENCRYPTED或UNENCRYPTED(因为系统无法解密指定的加密密码字符串)。这允许在转储/还原期间重新加载加密的密码。 VALID UNTIL 'timestamp'- VALID UNTIL子句设置日期和时间,之后该角色的密码将不再有效。 如果省略此子句,密码将永不过期。
IN ROLE rolename- 将新角色添加为命名角色的成员。 请注意,没有任何选项可以将新角色添加为管理员。 使用单独的
GRANT命令来执行此操作。 ROLE rolename- 将命名角色添加为该角色的成员,从而使该新角色成为一个组。
ADMIN rolenameADMIN子句类似于ROLE, 但是被提及的角色被使用WITH ADMIN OPTION加入到新角色中,从而赋予他们将这个角色的成员资格授予其他人的权利。RESOURCE GROUP group_name-
要分配给新角色的资源组的名称。 该角色将受限于资源组配置的并发事务,内存和CPU限制。 您可以将一个资源组分配给一个或多个角色。
如果未为新角色指定资源组,则会自动为该角色分配角色的默认资源组, 为
SUPERUSER角色分配admin_group,为非管理员角色分配default_group。可以将
admin_group资源组分配给具有SUPERUSER属性的任何角色。可以将default_group资源组分配给任何角色。不能将为外部组件创建的资源组分配给角色。 DENY deny_point|DENY BETWEEN deny_point AND deny_point-
DENY和DENY BETWEEN关键字设置在登录时强制执行的基于时间的约束。DENY设置拒绝访问的日期或日期和时间。DENY BETWEEN设置一个拒绝访问的时间间隔。 两者都使用具有以下格式的参数deny_point:DAY day [ TIME 'time' ]deny_point参数的两个部分使用以下格式:- 对于
day:
{'Sunday' | 'Monday' | 'Tuesday' |'Wednesday' | 'Thursday' | 'Friday' | 'Saturday' | 0-6 }- 对于
time:
{ 00-23 : 00-59 | 01-12 : 00-59 { AM | PM }}DENY BETWEEN子句使用两个deny_point参数:DENY BETWEEN deny_point AND deny_point - 对于
- 注解
-
添加和删除角色成员(管理组)的首选方法是使用
GRANT和REVOKE。VALID UNTIL子句仅为密码而不是角色定义过期时间。 使用非基于密码的身份验证方法登录时,不会强制使用到期时间。INHERIT属性控制可授予权限(数据库对象和角色成员的访问权限)的继承。 它不适用于由CREATE ROLE和ALTER ROLE设置的特殊角色属性。 例如,即使设置了INHERIT,具有CREATEDB权限的角色成员也不会立即授予创建数据库的能力。这些权限/属性永远不会被继承:SUPERUSER,CREATEDB,CREATEROLE,CREATEEXTTABLE,LOGIN,RESOURCE GROUP。必须在每个用户级角色上设置属性。
由于向后兼容,
INHERIT属性是默认属性。 在以前的SeaboxMPP数据库版本中,用户始终可以访问其所属组的所有权限。但是,NOINHERIT提供与SQL标准中指定的语义更接近的匹配。使用
CREATEROLE权限时要小心。 对于CREATEROLE-role的权限,没有继承的概念。这意味着,即使一个角色没有特定的权限,但被允许创建其他角色,它也可以轻松地创建另一个角色,而该角色的权限不同于其自己的角色(创建具有超级用户权限的角色除外)。例如,如果角色具有CREATEROLE权限,但没有CREATEDB权限,则它可以使用CREATEDB权限创建新角色。因此,将具有CREATEROLE权限的角色视为几乎超级用户角色。超级用户绝不执行
CONNECTION LIMIT选项。使用此命令指定未加密的密码时必须小心。 密码将以明文形式传输到服务器,并且也可能会记录在客户端的命令历史记录或服务器日志中。但是,客户端程序
createuser传输加密的密码。另外,ssql包含命令\password,可用于稍后安全地更改密码。 - 示例
-
创建一个可以登录但不提供密码的角色:
CREATE ROLE jonathan LOGIN;使用有效期至2016年底的密码创建角色 (
CREATE USER与CREATE ROLE相同,只不过它暗含了LOGIN):CREATE USER joelle WITH PASSWORD 'jw8s0F4' VALID UNTIL '2017-01-01';创建一个可以创建数据库并管理其他角色的角色:
CREATE ROLE admin WITH CREATEDB CREATEROLE;创建一个角色,该角色在星期日不允许登录访问:
CREATE ROLE user3 DENY DAY 'Sunday';创建一个可以创建类型为'scfs'的可读可写外部表的角色:
CREATE ROLE jan WITH CREATEEXTTABLE(type='readable', protocol='scfs') CREATEEXTTABLE(type='writable', protocol='scfs');创建一个角色,分配一个资源组:
CREATE ROLE bill RESOURCE GROUP rg_light; - 兼容性说明
-
SQL标准定义了用户和角色的概念,但是将它们视为不同的概念,并将所有定义用户的命令留给数据库实现指定。
在SeaboxMPP数据库中,用户和角色被统一为单一类型的对象。因此,角色具有比标准中更多的可选属性。
CREATE ROLE在SQL标准中,但是该标准仅需要以下语法:CREATE ROLE name [WITH ADMIN rolename]SeaboxMPP数据库扩展是允许多个初始管理员,以及
CREATE ROLE的所有其他选项。通过为用户提供
NOINHERIT属性, 而为角色赋予INHERIT属性,可以最接近地逼近SQL标准指定的行为。 - 相关SQL命令
SET ROLE,ALTER ROLE,DROP ROLE,GRANT,REVOKE,CREATE RESOURCE GROUP