ALTER ROLE

更改一个数据库角色(用户或组)。

概要

  1. ALTER ROLE name [ [ WITH ] option [ ... ] ]
  2. 其中 option 可以是:
  3. SUPERUSER | NOSUPERUSER
  4. | CREATEDB | NOCREATEDB
  5. | CREATEROLE | NOCREATEROLE
  6. | CREATEEXTTABLE | NOCREATEEXTTABLE [ ( attribute='value' [, ...] )
  7. where attributes and values are:
  8. type='readable'|'writable'
  9. protocol='gpfdist'|'http'
  10. | INHERIT | NOINHERIT
  11. | LOGIN | NOLOGIN
  12. | REPLICATION | NOREPLICATION
  13. | CONNECTION LIMIT connlimit
  14. | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
  15. | VALID UNTIL 'timestamp'
  16. ALTER ROLE name RENAME TO new_name
  17. ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
  18. ALTER ROLE { name | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
  19. ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
  20. ALTER ROLE { name | ALL } [ IN DATABASE database_name ] RESET ALL
  21. ALTER ROLE name RESOURCE QUEUE {queue_name | NONE}
  22. ALTER ROLE name RESOURCE GROUP {group_name | NONE}

描述

ALTER ROLE更改Greenplum数据库角色的属性。此命令有几种变体

WITH option

修改可以在CREATE ROLE中指定的大多数角色属性。 (包含了所有可能的属性,但不包括添加或删除成员身份的选项;为那些选项使用 GRANTREVOKE 。) 在这个命令中没提到 的属性将保留她们原来的值。超级用户可以为任何角色修改任何设置。 拥有 CREATEROLE 权限的角色可以修改任意的这些设置,但是仅限于非超级用户 和非replication角色。 普通用户只可以修改自己的密码。

RENAME

更改角色的名称。数据库超级用户可以重命名任何角色。角色有 CREATEROLE 特权 可以重命名非超级用户角色。无法重命名当前会话用户(以其他用户身份连接重命名角色)。 因为MD5加密的密码使用角色名称作为密钥,如果密码为MD5加密,则重命名角色将清除其密码。

SET | RESET

为指定的配置参数更改角色的会话默认值, 对于所有数据库,或者在IN DATABASE子句指定数据库时,仅对命名数据库中的会话 进行更改。如果指定了all而不是角色名,则会更改所有角色的设置。在IN DATABASE 使用ALL实际上与使用命令ALTER DATABASE…SET…一样。

每当角色随后启动新会话时,指定的值将成为会话默认值,覆盖服务器配置文件 (postgresql.conf)中存在的,或从postgres命令行接收到的任何设置。 这只会发生在登录时,执行SET ROLE 或者 SET SESSION AUTHORIZATION 不会触发设置新的值

附加到角色的数据库特定设置将覆盖所有数据库的设置。特定数据库或特定角色的设置将覆盖所有角色的设置。

对于没有LOGIN权限的角色,会话默认值无效。普通角色可以更改自己的会话默认值。超级用户可以更改任何人的会话默认值。具有CREATEROLE权限的角色可以更改非超级用户角色的默认值。普通角色只能为自己设置默认值。某些配置变量不能这样设置,或者只能在超级用户发出命令时设置。有关所有用户可设置配置参数的信息,请参阅Greenplum数据库参考指南。只有超级用户才能更改所有数据库中所有角色的设置。

RESOURCE QUEUE

将角色分配给工作负载管理资源队列。 在发出查询时,角色将受到分配资源队列的限制。指定NONE将角色分配给默认资源队列。一个角色只能属于一个资源队列。对于没有LOGIN特权的角色,会话默认值没有任何作用。 参考CREATE RESOURCE QUEUE 获取更多信息。

RESOURCE GROUP

为角色分配资源组。然后,角色将受制于为资源组配置的并发事务、内存和CPU限制。可以将单个资源组分配给一个或多个角色。不能将为外部组件创建的资源组分配给角色。参考CREATE RESOURCE GROUP获取更多信息。

参数

name

将被修改属性的角色名。

new_name

该角色的新名称。

database_name

将要设置配置参数的数据库名。

config_parameter=value

将指定配置参数的此角色会话默认值设置为给定值。如果 value是DEFAULT 指或者指定 RESET ,则角色的指定参数设置会被删除,角色将在新会话里面继承系统层面的默认值,使用RESET ALL 可以清除所有的角色特殊配置。 SET FROM CURRENT 保存会话的当前参数值作为角色指定的值。如果指定了IN DATABASE ,则只会为指定的角色数据库。当随后角色 开启新的会话时,指定的参数值成为会话的默认值,覆盖服务器配置文件(postgresql.conf)中存在的,或从 postgres命令行接收到的任何设置。

角色指定的变量设置只会在登录时生效; SET ROLE 和 SET SESSION AUTHORIZATION不会处理指定角色的变量设置。

参阅 服务器配置参数 来获取更多关于用户可设置参数的信息。

group_name

分配给该角色的资源组名称。指定group_name为 NONE 删除角色当前分配的资源组,基于角色的能力分配一个默认资源组。 SUPERUSER 角色分配 admin_group 资源组,而default_group 资源组则分配给非admin 角色。

不能将为外部组件创建的资源组分配给角色。

queue_name

要分配用户级角色的资源队列的名称。 只有LOGIN特权的角色 可以分配给资源队列。要从资源队列中取消分配角色并将其置于默认资源队列中, 请指定NONE。 角色只能属于一个资源队列。

SUPERUSER | NOSUPERUSER

CREATEDB | NOCREATEDB

CREATEROLE | NOCREATEROLE

CREATEUSER | NOCREATEUSER

CREATEUSER 和 NOCREATEUSER 已经过期,但是 仍被接受为SUPERUSER和 NOSUPERUSER。注意,它们 不等同于CREATEROLE and和NOCREATEROLE子句。

CREATEEXTTABLE | NOCREATEEXTTABLE [(attribute=’value’)]

如果CREATEEXTTABLE 被指定, 允许定义的角色创建外部表。如果没 被指定,默认类型是readable,并且默认协议 是gpfdist。 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 :

  1. DAY day [ TIME 'time' ]

deny_point两部分参数使用以下格式::

对于 day:

  1. {'Sunday' | 'Monday' | 'Tuesday' |'Wednesday' | 'Thursday' | 'Friday' |
  2. 'Saturday' | 0-6 }

对于time:

{ 00-23 : 00-59 | 01-12 : 00-59 { AM | PM }}

DENY BETWEEN子句使用两种deny_point参数。

  1. DENY BETWEEN deny_point AND deny_point

有关基于时间的约束和示例的更多信息,参阅Greenplum数据库管理员指南中的“管理角色和特权”。

DROP DENY FOR deny_point

该DROP DENY FOR子句从角色中删除基于时间的约束。它使用上述的deny_point参数。

有关基于时间的约束和示例的更多信息,参阅Greenplum数据库管理员指南中的“管理角色和特权”。

注意

使用 CREATE ROLE 新增角色, 使用DROP ROLE 删除角色。

使用 GRANTREVOKE 来增加和删除角色成员。

使用此命令指定未加密的密码时,必须小心。密码将以明文形式发送到服务器,也可能会记录在客户端的命令历史记录或服务器日志中。 该 psql命令行客户端包含一个元命令\password可用于安全地更改角色的密码。

还可以将会话默认值与特定数据库而不是角色绑定。如果存在冲突,则特定于角色的设置将覆盖数据库特定的设置。参阅 ALTER DATABASE

示例

更改角色的密码:

  1. ALTER ROLE daria WITH PASSWORD 'passwd123';

删除角色的密码:

  1. ALTER ROLE daria WITH PASSWORD NULL;

更改密码失效日期:

  1. ALTER ROLE scott VALID UNTIL 'May 4 12:00:00 2015 +1';

使密码永久有效:

  1. ALTER ROLE luke VALID UNTIL 'infinity';

赋予角色创建其他角色和新数据库的能力:

  1. ALTER ROLE joelle CREATEROLE CREATEDB;

给角色一个非默认设置maintenance_work_mem参数:

  1. ALTER ROLE admin SET maintenance_work_mem = 100000;

给角色一个非默认,指定数据库的参数client_min_messages 值:

  1. ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

将角色分配给资源队列:

  1. ALTER ROLE sammy RESOURCE QUEUE poweruser;

授予创建可写外部表的角色权限:

  1. ALTER ROLE load CREATEEXTTABLE (type='writable');

更改角色在星期日不允许登录访问:

  1. ALTER ROLE user3 DENY DAY 'Sunday';

改变角色以消除星期日不允许登录访问的约束:

  1. ALTER ROLE user3 DROP DENY FOR DAY 'Sunday';

指定一个新的资源组给角色:

  1. ALTER ROLE parttime_user RESOURCE GROUP rg_light;

兼容性

ALTER ROLE 语句是 Greenplum 数据库的扩展

另见

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET, CREATE RESOURCE GROUP, CREATE RESOURCE QUEUE, GRANT, REVOKE

Parent topic: SQL Command Reference