暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

Halo数据之SQL命令--ALTER ROLE

原创 贾桂军 2023-12-28
12488

ALTER ROLE

ALTER ROLE — 更改一个数据库角色

 

大纲

ALTER ROLE role_specification [ WITH ] option [ ... ]

其中option可以是:

SUPERUSER | NOSUPERUSER

| CREATEDB | NOCREATEDB

| CREATEROLE | NOCREATEROLE

| INHERIT | NOINHERIT

| LOGIN | NOLOGIN

| REPLICATION | NOREPLICATION

| BYPASSRLS | NOBYPASSRLS

| CONNECTION LIMIT connlimit

| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL

| VALID UNTIL 'timestamp'

ALTER ROLE name RENAME TO new_name

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ]

SET configuration_parameter { TO | = } { value | DEFAULT }

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ]

SET configuration_parameter FROM CURRENT

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ]

RESET configuration_parameter

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL

其中role_specification可以是:

role_name

| CURRENT_USER

| SESSION_USER

 

描述

ALTER ROLE更改角色的属性。

前面列出的这个命令的第一种变体能够更改CREATE  ROLE中指定的很多角色属性(覆盖了所有可能的属性,不过没有增加和移除成员关系的选项,  如果要增加和移除成员关系可使用GRANT和  REVOKE)。该命令中没有提到的属性保持它们之前的设置。数据库超级用户能够更改任何角色的任何这些设置。具有CREATEROLE特权的角色能够更改除SUPERUSER,REPLICATION和 BYPASSRLS外的任何这些设置,但是只能为非超级用户和非复制角色修改。普通角色只能更改它们自己的口令。第二种变体更改该角色的名称。数据库超级用户能重命名任何角色。具有 CREATEROLE特

权的角色能够重命名任何非超级用户角色。当前的会话用户不能被重命名(如果需要这样做,请以一个不同的用户连接)。由于 MD5加密的口令使用角色名作为 salt,因此如果一个角色的口令是 MD5加密的,重命名该角色会清空其口令。

其余的变体用于更改一个角色的配置变量的会话默认值,可以为所有数据库设置,或者只为IN DATABASE中指定的数据库设置。如果指定的是 ALL而不是一个角色名,将会为所有角色更改该设置。把 ALL和IN DATABASE一起使用实际上和使用命令ALTER DATABASE ...SET ...相同。

只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖postgresql.conf中的值。这只在登录时发生,执行SET ROLE或者 SET SESSION AUTHORIZATION不会导致新的配置值被设置。对于所有数据库设置的值会被附加到一个角色的数据库相关的设置所覆盖。特定数据库或角色的设置会覆盖为所有角色所作的设置。超级用户能够更改任何人的会话默认值。具有CREATEROLE特权的角色能够更改非超级用户的默认值。普通角色只能为它们自己设置默认值。某些配置变量不能以这种方式设置,或者只能由一个超级用户发出的命令设置。只有超级用户能够更改所有角色在所有数据库中的设置。

 

参数

name

要对其属性进行修改的角色的名称。

 

CURRENT_USER

修改当前用户而不是一个显式标识的角色。

 

SESSION_USER

修改当前会话用户而不是一个显式标识的角色。

 

SUPERUSER

NOSUPERUSER

CREATEDB

NOCREATEDB

CREATEROLE

NOCREATEROLE

INHERIT

NOINHERIT

LOGIN

NOLOGIN

REPLICATION

NOREPLICATION

BYPASSRLS

NOBYPASSRLS

CONNECTION LIMIT connlimit

[ ENCRYPTED ] PASSWORD 'password'

PASSWORD NULL

VALID UNTIL 'timestamp'

这些子句修改原来有CREATE ROLE 设置的属性。更多信息请见 CREATE ROLE参考页。

new_name

该角色的新名称。

 

database_name

要在其中设置该配置变量的数据库名称。

 

configuration_parameter

value

把这个角色的指定配置参数的会话默认值设置为给定值。如果 value为DEFAULT或者等效地使用了RESET,角色相关的变量设置会被移除,这样该角色将会在新会话中继承系统范围的默认设置。使用RESET ALL可清除所有角色相关的设置。SET FROM CURRENT可以把会话中该参数的当前值保存为角色相关的值。如果指定了 IN DATABASE,只会为给定的角色和数据库 设置或者移除该配置参数。

角色相关的变量设置只在登录时生效,SET ROLE以及 SET SESSION AUTHORIZATION不会处理角色 相关的变量设置。

 

注解

使用CREATE ROLE增加新角色,使用 DROP ROLE移除一个角色。

ALTER ROLE无法更改一个角色成员关系。可以使用GRANT和 REVOKE来实现。

在使用这个命令指定一个未加密口令时要多加小心。该口令将会以明文传送到服务器,并且它还可能会被记录在客户端的命令历史或者服务器日志中。psql包含了一个命令\password,它可以被用来更改一个角色的口令而不暴露明文口令。也可以把一个会话默认值绑定到一个指定的数据库而不是一个角色,详见 ALTER DATABASE。

如果出现冲突,数据库角色相关的设置会覆盖角色相关的设置,角色相关的又会覆盖数据库相关的设置。

 

示例

更改一个角色的口令:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

 

移除一个角色的口令:

ALTER ROLE davide WITH PASSWORD NULL;

 

更改一个口令的失效日期,指定该口令应该在 2015 年 5 月 4 日中午 (在一个比UTC快 1小时的时区)过期:

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

 

让一个口令永远有效:

ALTER ROLE fred VALID UNTIL 'infinity';

 

让一个角色能够创建其他角色和新的数据库:

ALTER ROLE miriam CREATEROLE CREATEDB;

 

为一个角色指定 maintenance_work_mem参数的非默认设置:

ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

 

为一个角色指定 client_min_messages参数的数据库相关的非 默认设置:

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

 

另见

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

冷狼
暂无图片
1年前
评论
暂无图片 0
Halo数据之SQL命令--ALTER ROLE
1年前
暂无图片 点赞
评论