ALTER ROLE
ALTER ROLE¶
更改一个数据库角色(用户或组)。
- 语法
-
``` sql ALTER ROLE name [ [ WITH ] option [ … ] ]
其中 option 可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEEXTTABLE | NOCREATEEXTTABLE [ ( attribute='value' [, …] ) where attributes and values are: type='readable'|'writable' protocol='scfs'|'http' | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp'
ALTER ROLE name RENAME TO new_name
ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT } ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET configuration_parameter ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET ALL ALTER ROLE name RESOURCE GROUP {group_name | NONE} ```
- 描述
-
ALTER ROLE
更改SeaboxMPP数据库角色的属性。此命令有几种变体WITH option
- 修改可以在
CREATE ROLE
中指定的大多数角色属性。 (包含了所有可能的属性,但不包括添加或删除成员身份的选项;为那些选项使用GRANT
和REVOKE
。) 在这个命令中没提到的属性将保留她们原来的值。超级用户可以为任何角色修改任何设置。 拥有CREATEROLE
权限的角色可以修改任意的这些设置,但是仅限于非超级用户和非replication角色。普通用户只可以修改自己的密码。 RENAME
- 更改角色的名称。数据库超级用户可以重命名任何角色。角色有
CREATEROLE
权限可以重命名非超级用户角色。无法重命名当前会话用户(以其他用户身份连接重命名角色)。因为MD5加密的密码使用角色名称作为密钥,如果密码为MD5加密,则重命名角色将清除其密码。 SET | RESET
-
为指定的配置参数更改角色的会话默认值, 对于所有数据库,或者在
IN DATABASE
子句指定数据库时,仅对命名数据库中的会话进行更改。如果指定了all而不是角色名,则会更改所有角色的设置。在IN DATABASE
使用ALL
实际上与使用命令ALTER DATABASE...SET...
一样。每当角色随后启动新会话时,指定的值将成为会话默认值,覆盖服务器配置文件(
seaboxsql.conf
)中存在的,或从postgres
命令行接收到的任何设置。 这只会发生在登录时,执行SET ROLE 或者 SET SESSION AUTHORIZATION 不会触发设置新的值。附加到角色的数据库特定设置将覆盖所有数据库的设置。特定数据库或特定角色的设置将覆盖所有角色的设置。
对于没有
LOGIN
权限的角色,会话默认值无效。普通角色可以更改自己的会话默认值。超级用户可以更改任何人的会话默认值。具有CREATE ROLE
权限的角色可以更改非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能这样设置,或者只能在超级用户发出命令时设置。只有超级用户才能更改所有数据库中所有角色的设置。 RESOURCE GROUP
- 为角色分配资源组。然后,角色将受制于为资源组配置的并发事务、内存和CPU限制。可以将单个资源组分配给一个或多个角色。不能将为外部组件创建的资源组分配给角色。参考
CREATE RESOURCE GROUP
获取更多信息。
- 参数
-
该SQL命令参数说明见下
name
- 将被修改属性的角色名。
new_name
- 该角色的新名称。
database_name
- 将要设置配置参数的数据库名。
config_parameter=value
-
将指定配置参数的此角色会话默认值设置为给定值。如果
value
是DEFAULT
指或者指定RESET
,则角色的指定参数设置会被删除,角色将在新会话里面继承系统层面的默认值,使用RESET ALL
可以清除所有的角色特殊配置。SET FROM CURRENT
保存会话的当前参数值作为角色指定的值。如果指定了IN DATABASE
,则只会为指定的角色数据库。当随后角色开启新的会话时,指定的参数值成为会话的默认值,覆盖服务器配置文件(seaboxsql.conf
)中存在的,或从postgres
命令行接收到的任何设置。角色指定的变量设置只会在登录时生效;
SET ROLE
和SET SESSION AUTHORIZATION
不会处理指定角色的变量设置。 group_name
-
分配给该角色的资源组名称。指定
group_name
为NONE
删除角色当前分配的资源组,基于角色的能力分配一个默认资源组。SUPERUSER
角色分配admin_group
资源组,而default_group
资源组则分配给非admin角色。不能将为外部组件创建的资源组分配给角色。
SUPERUSER | NOSUPERUSER
CREATEDB | NOCREATEDB
CREATEROLE | NOCREATEROLE
CREATEUSER | NOCREATEUSER
CREATEUSER
和NOCREATEUSER
已经过期,但是 仍被接受为SUPERUSER
和NOSUPERUSER
。注意,它们 不等同于CREATEROLE and
和NOCREATEROLE
子句。CREATEEXTTABLE | NOCREATEEXTTABLE [(attribute='value')]
- 如果
CREATEEXTTABLE
被指定, 允许定义的角色创建外部表。如果没被指定,默认类型
是readable
,并且默认协议
是scfs
。NOCREATEEXTTABLE
(默认)拒绝角色有创建外部表的能力。 注意使用的外部表file
或execute
协议只能由超级用户创建。 INHERIT | NOINHERIT
|LOGIN | NOLOGIN
|REPLICATION
|NOREPLICATION
|CONNECTION LIMIT connlimit
|PASSWORD password
|ENCRYPTED | UNENCRYPTED
|VALID UNTIL 'timestamp'
- 这些子句通过
CREATE ROLE
改变了原来设置的角色属性。 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
有关基于时间的约束和示例的更多信息,参阅SeaboxMPP数据库管理员指南中的“管理角色和权限”。
DROP DENY FOR deny_point
- 该
DROP DENY FOR
子句从角色中删除基于时间的约束。它使用上述的deny_point
参数。
- 注意
-
使用
CREATE ROLE
新增角色, 使用DROP ROLE
删除角色。使用
GRANT
和REVOKE
来增加和删除角色成员。使用此命令指定未加密的密码时,必须小心。密码将以明文形式发送到服务器,也可能会记录在客户端的命令历史记录或服务器日志中。 该
ssql
命令行客户端包含一个元命令\password
可用于安全地更改角色的密码。还可以将会话默认值与特定数据库而不是角色绑定。如果存在冲突,则特定于角色的设置将覆盖数据库特定的设置。参阅
ALTER DATABASE
。 - 示例
-
更改角色的密码:
ALTER ROLE daria WITH PASSWORD 'passwd123';
删除角色的密码:
ALTER ROLE daria WITH PASSWORD NULL;
更改密码失效日期:
ALTER ROLE scott VALID UNTIL 'May 4 12:00:00 2015 +1';
使密码永久有效:
ALTER ROLE luke VALID UNTIL 'infinity';
赋予角色创建其他角色和新数据库的能力:
ALTER ROLE joelle CREATEROLE CREATEDB;
给角色一个非默认设置
maintenance_work_mem
参数:ALTER ROLE admin SET maintenance_work_mem = 100000;
给角色一个非默认,指定数据库的参数
client_min_messages
值:ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
授予创建可写外部表的角色权限:
ALTER ROLE load CREATEEXTTABLE (type='writable');
更改角色在星期日不允许登录访问:
ALTER ROLE user3 DENY DAY 'Sunday';
改变角色以消除星期日不允许登录访问的约束:
ALTER ROLE user3 DROP DENY FOR DAY 'Sunday';
指定一个新的资源组给角色:
ALTER ROLE parttime_user RESOURCE GROUP rg_light;
- 兼容性说明
ALTER ROLE
语句是 SeaboxMPP 数据库的扩展- 相关SQL命令
CREATE ROLE
,DROP ROLE
,ALTER DATABASE
,SET
,CREATE RESOURCE GROUP
,GRANT
,REVOKE