========== ALTER ROLE ========== .. container:: refentry :name: SQL-ALTERROLE .. container:: titlepage .. container:: refnamediv .. rubric:: ALTER ROLE :name: alter-role ALTER ROLE — 更改一个数据库角色 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis 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 .. container:: refsect1 :name: id-1.9.3.26.5 .. rubric:: 描述 :name: 描述 ``ALTER ROLE``\ 更改一个 PostgreSQL角色的属性。 前面列出的这个命令的第一种变体能够更改\ `CREATE ROLE `__\ 中 指定的很多角色属性(覆盖了所有可能的属性,不过没有增加和移除成员关系的选项, 如果要增加和移除成员关系可使用\ `GRANT `__\ 和 `REVOKE `__\ )。该命令中没有提到的属性保持它们之前的设置。 数据库超级用户能够更改任何角色的任何这些设置。具有\ ``CREATEROLE`` 特权的角色能够更改任何这些设置,但是只能为非超级用户和非复制角色修改。普通 角色只能更改它们自己的口令。 第二种变体更改该角色的名称。数据库超级用户能重命名任何角色。具有 ``CREATEROLE``\ 特权的角色能够重命名任何非超级用户角色。当前的会话 用户不能被重命名(如果需要这样做,请以一个不同的用户连接)。由于 ``MD5``\ 加密的口令使用角色名作为 salt,因此如果一个角色的口令是 ``MD5``\ 加密的,重命名该角色会清空其口令。 其余的变体用于更改一个角色的配置变量的会话默认值,可以为所有数据库设置,或者 只为\ ``IN DATABASE``\ 中指定的数据库设置。如果指定的是 ``ALL``\ 而不是一个角色名,将会为所有角色更改该设置。把 ``ALL``\ 和\ ``IN DATABASE``\ 一起使用实际上和使用命 令\ ``ALTER DATABASE ... SET ...``\ 相同。 只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖 ``postgresql.conf``\ 中存在的值或者从 ``postgres``\ 命令行收到的值。这只在登录时发生,执行 `SET ROLE `__\ 或者 `SET SESSION AUTHORIZATION `__\ 不会导致新的配置值被设置。 对于所有数据库设置的值会被附加到一个角色的数据库相关的设置所覆盖。特定数 据库或角色的设置会覆盖为所有角色所作的设置。 超级用户能够更改任何人的会话默认值。具有\ ``CREATEROLE``\ 特权的角色 能够更改非超级用户的默认值。普通角色只能为它们自己设置默认值。某些配置变量 不能以这种方式设置,或者只能由一个超级用户发出的命令设置。只有超级用户能够 更改所有角色在所有数据库中的设置。 .. container:: refsect1 :name: id-1.9.3.26.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``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 `__\ 不会处理角色 相关的变量设置。 .. container:: refsect1 :name: id-1.9.3.26.7 .. rubric:: 注解 :name: 注解 使用\ `CREATE ROLE `__\ 增加新角色,使用 `DROP ROLE `__\ 移除一个角色。 ``ALTER ROLE``\ 无法更改一个角色成员关系。 可以使用\ `GRANT `__\ 和 `REVOKE `__\ 来实现。 在使用这个命令指定一个未加密口令时要多加小心。该口令将会以明文 传送到服务器,并且它还可能会被记录在客户端的命令历史或者服务器 日志中。\ `psql `__\ 包含了一个命令 ``\password``\ ,它可以被用来更改一个角色 的口令而不暴露明文口令。 也可以把一个会话默认值绑定到一个指定的数据库而不是一个角色,详见 `ALTER DATABASE `__\ 。如果出现冲突,数据库角色相关 的设置会覆盖角色相关的设置,角色相关的又会覆盖数据库相关的设置。 .. container:: refsect1 :name: id-1.9.3.26.8 .. rubric:: 示例 :name: 示例 更改一个角色的口令: .. code:: programlisting ALTER ROLE davide WITH PASSWORD 'hu8jmn3'; 移除一个角色的口令: .. code:: programlisting ALTER ROLE davide WITH PASSWORD NULL; 更改一个口令的失效日期,指定该口令应该在 2015 年 5 月 4 日中午 (在一个比UTC快 1 小时的时区)过期: .. code:: programlisting ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1'; 让一个口令永远有效: .. code:: programlisting ALTER ROLE fred VALID UNTIL 'infinity'; 让一个角色能够创建其他角色和新的数据库: .. code:: programlisting ALTER ROLE miriam CREATEROLE CREATEDB; 为一个角色指定 maintenance_work_mem 参数的非默认设置: .. code:: programlisting ALTER ROLE worker_bee SET maintenance_work_mem = 100000; 为一个角色指定 `client_min_messages `__\ 参数的数据库相关的非 默认设置: .. code:: programlisting ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG; .. container:: refsect1 :name: id-1.9.3.26.9 .. rubric:: 兼容性 :name: 兼容性 ``ALTER ROLE``\ 语句是一个 PostgreSQL扩展。 .. container:: refsect1 :name: id-1.9.3.26.10 .. rubric:: 另见 :name: 另见 `CREATE ROLE `__, `DROP ROLE `__, `ALTER DATABASE `__, `SET `__