CREATE ROLE
定义一个新的数据库角色(用户或组)。
概要
CREATE ROLE name [[WITH] option [ ... ]]
其中option可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| CREATEEXTTABLE | NOCREATEEXTTABLE
[ ( attribute='value'[, ...] ) ]
where attributes and value are:
type='readable'|'writable'
protocol='gpfdist'|'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 QUEUE queue_name
| RESOURCE GROUP group_name
| [ DENY deny_point ]
| [ DENY BETWEEN deny_point AND deny_point]
描述
CREATE ROLE
在Greenplum数据库系统中添加了新角色。
角色是可以拥有数据库对象并具有数据库特权的实体。
根据角色的使用方式,可以将角色视为用户,组或两者。
您必须具有CREATEROLE
特权或是数据库超级用户才能使用此命令。
请注意,角色是在系统级别定义的,并且对于Greenplum数据库系统中的所有数据库均有效。
参数
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
为gpfdist
。
有效类型为gpfdist
,gpfdists
,http
和https
。
NOCREATEEXTTABLE
(默认类型)拒绝该角色创建外部表。
请注意,使用file
或execute
协议的外部表只能由超级用户创建。
使用GRANT...ON PROTOCOL
命令允许用户创建和使用具有自定义协议类型的外部表,
包括Greenplum数据库附带的s3
和pxf
协议。
INHERIT
NOINHERIT
如果指定了该属性,则INHERIT
(默认设置)允许该角色使用为其直接或间接所属的所有角色授予的任何数据库特权。
使用NOINHERIT
时,另一个角色的成员资格仅授予SET ROLE
权限给该另一个角色。
LOGIN
NOLOGIN
如果指定,则LOGIN
允许角色登录数据库。
可以将具有LOGIN
属性的角色视为用户。
具有NOLOGIN
的角色对于管理数据库特权很有用,并且可以视为组。
如果未指定,则NOLOGIN
为默认值,
除非CREATE ROLE
通过其替代拼写[CREATE USER](CREATE_USER.html#topic1)
被调用时。
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 rolename
ADMIN
子句类似于ROLE
,
但是被提及的角色被使用WITH ADMIN OPTION
加入到新角色中,
从而赋予他们将这个角色的成员资格授予其他人的权利。
RESOURCE GROUP group_name
要分配给新角色的资源组的名称。 该角色将受限于资源组配置的并发事务,内存和CPU限制。 您可以将一个资源组分配给一个或多个角色。
如果未为新角色指定资源组,则会自动为该角色分配角色的默认资源组,
为SUPERUSER
角色分配admin_group
,
为非管理员角色分配default_group
。
您可以将admin_group
资源组分配给具有SUPERUSER
属性的任何角色。
您可以将default_group
资源组分配给任何角色。
您不能将为外部组件创建的资源组分配给角色。 RESOURCE QUEUE queue_name
新用户级别角色将分配到的资源队列的名称。
只能将具有LOGIN
特权的角色分配给资源队列。
特殊关键字NONE
表示将角色分配给默认资源队列。
一个角色只能属于一个资源队列。
具有SUPERUSER
属性的角色不受资源队列限制。
对于超级用户角色,无论分配的资源队列施加什么限制,查询总是立即运行。
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
有关基于时间的约束的更多信息和示例,请参阅Greenplum数据库管理员指南中的“管理角色和特权”。
注解
添加和删除角色成员(管理组)的首选方法是使用[GRANT](GRANT.html#topic1)
和[REVOKE](REVOKE.html#topic1)
。
VALID UNTIL
子句仅为密码而不是角色定义过期时间。
使用非基于密码的身份验证方法登录时,不会强制使用到期时间。
INHERIT
属性控制可授予特权(数据库对象和角色成员的访问特权)的继承。
它不适用于由CREATE ROLE
和ALTER ROLE
设置的特殊角色属性。
例如,即使设置了INHERIT
,具有CREATEDB
特权的角色成员也不会立即授予创建数据库的能力。
这些特权/属性永远不会被继承:
SUPERUSER
,CREATEDB
,CREATEROLE
,
CREATEEXTTABLE
,LOGIN
,RESOURCE GROUP
和RESOURCE QUEUE
。
必须在每个用户级角色上设置属性。
由于向后兼容,INHERIT
属性是默认属性。
在以前的Greenplum数据库版本中,用户始终可以访问其所属组的所有特权。
但是,NOINHERIT
提供与SQL标准中指定的语义更接近的匹配。
使用CREATEROLE
特权时要小心。
对于CREATEROLE
-role的特权,没有继承的概念。
这意味着,即使一个角色没有特定的特权,但被允许创建其他角色,
它也可以轻松地创建另一个角色,而该角色的特权不同于其自己的角色(创建具有超级用户特权的角色除外)。
例如,如果角色具有CREATEROLE
特权,但没有CREATEDB
特权,则它可以使用CREATEDB
特权创建新角色。
因此,将具有CREATEROLE
特权的角色视为几乎超级用户角色。
超级用户绝不执行CONNECTION LIMIT
选项。
使用此命令指定未加密的密码时必须小心。
密码将以明文形式传输到服务器,并且也可能会记录在客户端的命令历史记录或服务器日志中。
但是,客户端程序createuser
传输加密的密码。
另外,psql包含命令\password
,可用于稍后安全地更改密码。
示例
创建一个可以登录但不提供密码的角色:
CREATE ROLE jonathan LOGIN;
创建一个属于资源队列的角色:
CREATE ROLE jonathan LOGIN RESOURCE QUEUE poweruser;
使用有效期至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';
创建一个可以创建类型为'gpfdist'的可读可写外部表的角色:
CREATE ROLE jan WITH CREATEEXTTABLE(type='readable', protocol='gpfdist')
CREATEEXTTABLE(type='writable', protocol='gpfdist');
创建一个角色,分配一个资源组:
CREATE ROLE bill RESOURCE GROUP rg_light;
兼容性
SQL标准定义了用户和角色的概念,但是将它们视为不同的概念,并将所有定义用户的命令留给数据库实现指定。 在Greenplum数据库中,用户和角色被统一为单一类型的对象。 因此,角色具有比标准中更多的可选属性。
CREATE ROLE
在SQL标准中,但是该标准仅需要以下语法:
CREATE ROLE name [WITH ADMIN rolename]
Greenplum数据库扩展是允许多个初始管理员,以及CREATE ROLE
的所有其他选项。
通过为用户提供NOINHERIT
属性,
而为角色赋予INHERIT
属性,可以最接近地逼近SQL标准指定的行为。
另见
[SET ROLE](SET_ROLE.html#topic1)
,
[ALTER ROLE](ALTER_ROLE.html#topic1)
, [DROP ROLE](DROP_ROLE.html#topic1)
, [GRANT](GRANT.html#topic1)
, [REVOKE](REVOKE.html#topic1)
,
[CREATE RESOURCE QUEUE](CREATE_RESOURCE_QUEUE.html#topic1)
[CREATE RESOURCE GROUP](CREATE_RESOURCE_GROUP.html#topic1)
Parent topic: SQL Command Reference