跳到主要内容
跳到主要内容

ALTER USER

更改 ClickHouse 用户帐户。

语法

ALTER USER [IF EXISTS] name1 [RENAME TO new_name |, name2 [,...]] 
[ON CLUSTER cluster_name]
[NOT IDENTIFIED | RESET AUTHENTICATION METHODS TO NEW | {IDENTIFIED | ADD IDENTIFIED} {[WITH {plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | WITH NO_PASSWORD | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name' | SAN 'TYPE:subject_alt_name'} | {WITH ssh_key BY KEY 'public_key' TYPE 'ssh-rsa|...'} | {WITH http SERVER 'server_name' [SCHEME 'Basic']} [VALID UNTIL datetime]
[, {[{plaintext_password | sha256_password | sha256_hash | ...}] BY {'password' | 'hash'}} | {ldap SERVER 'server_name'} | {...} | ... [,...]]]
[[ADD | DROP] HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[VALID UNTIL datetime]
[DEFAULT ROLE role [,...] | ALL | ALL EXCEPT role [,...] ]
[GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
[ADD|MODIFY SETTINGS variable [=value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE|CONST|CHANGEABLE_IN_READONLY] [,...] ]
[DROP SETTINGS variable [,...] ]
[ADD PROFILES 'profile_name' [,...] ]
[DROP PROFILES 'profile_name' [,...] ]
[DROP ALL PROFILES]
[DROP ALL SETTINGS]

要使用 ALTER USER,您必须拥有 ALTER USER 权限。

GRANTEES 子句

指定允许从该用户接收权限的用户或角色,条件是该用户也已通过 GRANT OPTION 授予所有必需的访问权限。 GRANTEES 子句的选项

  • user — 指定此用户可以向其授予权限的用户。
  • role — 指定此用户可以向其授予权限的角色。
  • ANY — 此用户可以向任何人授予权限。这是默认设置。
  • NONE — 此用户不能向任何人授予权限。

您可以使用 EXCEPT 表达式排除任何用户或角色。例如,ALTER USER user1 GRANTEES ANY EXCEPT user2。这意味着如果 user1 拥有通过 GRANT OPTION 授予的某些权限,它将能够将这些权限授予除 user2 之外的任何人。

示例

将分配的角色设置为默认角色

ALTER USER user DEFAULT ROLE role1, role2

如果角色之前未分配给用户,ClickHouse 将抛出异常。

将所有分配的角色设置为默认角色

ALTER USER user DEFAULT ROLE ALL

如果将来将角色分配给用户,它将自动变为默认角色。

将所有分配的角色设置为默认角色,除了 role1role2

ALTER USER user DEFAULT ROLE ALL EXCEPT role1, role2

允许 john 帐户的用户将其权限授予 jack 帐户的用户

ALTER USER john GRANTEES jack;

向用户添加新的身份验证方法,同时保留现有方法

ALTER USER user1 ADD IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3'

注释

  1. 旧版本的 ClickHouse 可能不支持多种身份验证方法的语法。因此,如果 ClickHouse 服务器包含此类用户并降级到不支持它的版本,则这些用户将变得不可用,并且一些与用户相关的操作将被破坏。为了平稳降级,必须在降级之前将所有用户设置为包含单一身份验证方法。或者,如果服务器在没有正确程序的情况下降级,则应删除有故障的用户。
  2. 出于安全原因,no_password 不能与其他身份验证方法共存。因此,无法 ADD no_password 身份验证方法。以下查询将抛出错误
ALTER USER user1 ADD IDENTIFIED WITH no_password

如果您想删除用户的身份验证方法并依赖 no_password,您必须在以下替换形式中指定。

重置身份验证方法并添加查询中指定的那些方法(不带 ADD 关键字的前导 IDENTIFIED 的效果)

ALTER USER user1 IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3'

重置身份验证方法并保留最近添加的方法

ALTER USER user1 RESET AUTHENTICATION METHODS TO NEW

VALID UNTIL 子句

允许您指定身份验证方法的到期日期,以及可选的时间。它接受字符串作为参数。建议对日期时间使用 YYYY-MM-DD [hh:mm:ss] [timezone] 格式。默认情况下,此参数等于 'infinity'VALID UNTIL 子句只能与身份验证方法一起指定,除非在查询中未指定任何身份验证方法的情况。在这种情况下,VALID UNTIL 子句将应用于所有现有的身份验证方法。

示例

  • ALTER USER name1 VALID UNTIL '2025-01-01'
  • ALTER USER name1 VALID UNTIL '2025-01-01 12:00:00 UTC'
  • ALTER USER name1 VALID UNTIL 'infinity'
  • ALTER USER name1 IDENTIFIED WITH plaintext_password BY 'no_expiration', bcrypt_password BY 'expiration_set' VALID UNTIL'2025-01-01''