跳到主要内容

ALTER USER

Introduced or updated: v1.2.956

修改用户帐户,包括:

  • 更改用户的密码和认证类型
  • 设置或取消设置密码策略
  • 设置或取消设置网络策略
  • 设置或修改默认角色。如果未显式设置,Databend 将默认使用内置角色 public 作为默认角色

语法​

-- 修改密码/认证类型
ALTER USER <name> IDENTIFIED [ WITH auth_type ] BY '<new_password>' [ WITH MUST_CHANGE_PASSWORD = true | false ]

-- 要求用户在下次登录时修改密码
ALTER USER <name> WITH MUST_CHANGE_PASSWORD = true

-- 修改当前登录用户的密码
ALTER USER USER() IDENTIFIED BY '<new_password>'

-- 设置密码策略
ALTER USER <name> WITH SET PASSWORD POLICY = '<policy_name>'

-- 取消设置密码策略
ALTER USER <name> WITH UNSET PASSWORD POLICY

-- 设置网络策略
ALTER USER <name> WITH SET NETWORK POLICY = '<policy_name>'

-- 取消设置网络策略
ALTER USER <name> WITH UNSET NETWORK POLICY

-- 设置默认角色
ALTER USER <name> WITH DEFAULT_ROLE = '<role_name>'

-- 启用或禁用用户
ALTER USER <name> WITH DISABLED = true | false

-- 设置工作负载组
ALTER USER <name> WITH SET WORKLOAD GROUP = '<workload_group_name>'

-- 取消设置工作负载组
ALTER USER <name> WITH UNSET WORKLOAD GROUP
  • auth_type 可以是 double_sha1_password(默认)、sha256_password 或 no_password
  • 当 MUST_CHANGE_PASSWORD 设置为 true 时,用户必须在下次登录时更改密码。请注意,这仅对自帐户创建以来从未更改过密码的用户生效。如果用户曾自行更改过密码,则无需再次更改
  • ALTER USER ... WITH DEFAULT_ROLE 会检查角色是否存在,以及该角色是否已通过直接授权或角色继承对目标用户可用,与登录和 SET ROLE 的角色可用性检查一致。它不会新增直接授权。如果任一检查失败,整条语句都会失败,不会修改用户,即使执行者拥有 GRANT 权限也一样。
  • 修改默认角色需要全局 ALTER 权限,不需要 GRANT 权限。授予尚未持有的角色是独立操作,需要 GRANT 权限。
  • 修改默认角色会保留所有已有角色授权。内置角色 public 对所有用户隐式可用,无需显式授予。将其设为默认角色不会新增角色授权。
  • 重复设置相同的默认角色,仍会检查角色是否存在以及是否对目标用户可用。修改密码或其他无关属性不会恢复已经撤销的默认角色授权。
  • 与 ALTER USER 不同,CREATE USER 会在创建用户时授予指定的非 public 默认角色。两个命令都保持 public 隐式可用。
  • DISABLED 允许您启用或禁用用户。被禁用的用户在被启用之前无法登录 Databend。点击此处查看示例

示例​

示例 1:更改密码和认证类型​

CREATE USER user1 IDENTIFIED BY 'abc123';

SHOW USERS;
+-----------+----------+----------------------+---------------+
| name | hostname | auth_type | is_configured |
+-----------+----------+----------------------+---------------+
| user1 | % | double_sha1_password | NO |
+-----------+----------+----------------------+---------------+

ALTER USER user1 IDENTIFIED WITH sha256_password BY '123abc';

SHOW USERS;
+-------+----------+-----------------+---------------+
| name | hostname | auth_type | is_configured |
+-------+----------+-----------------+---------------+
| user1 | % | sha256_password | NO |
+-------+----------+-----------------+---------------+

ALTER USER 'user1' IDENTIFIED WITH no_password;

show users;
+-------+----------+-------------+---------------+
| name | hostname | auth_type | is_configured |
+-------+----------+-------------+---------------+
| user1 | % | no_password | NO |
+-------+----------+-------------+---------------+

示例 2:设置和取消设置网络策略​

SHOW NETWORK POLICIES;

Name |Allowed Ip List |Blocked Ip List|Comment |
------------+-------------------------+---------------+-----------+
test_policy |192.168.10.0,192.168.20.0| |new comment|
test_policy1|192.168.100.0/24 | | |

CREATE USER user1 IDENTIFIED BY 'abc123';

ALTER USER user1 WITH SET NETWORK POLICY='test_policy';

ALTER USER user1 WITH SET NETWORK POLICY='test_policy1';

ALTER USER user1 WITH UNSET NETWORK POLICY;

示例 3:设置默认角色​

  1. 创建继承 writer 的 developer 角色,并将 developer 授予用户。无需直接授予 writer,即可将该继承角色设为默认角色:
以 “root” 用户连接:
CREATE ROLE developer;
CREATE ROLE writer;
GRANT ROLE writer TO ROLE developer;
CREATE USER user1 IDENTIFIED BY 'abc123';

GRANT ROLE developer TO USER user1;

ALTER USER user1 WITH DEFAULT_ROLE = 'writer';

用户唯一的直接角色授权仍为 developer;ALTER USER 将默认角色设为继承获得的 writer,不会新增授权。如果 writer 既未直接授予用户,也无法通过角色继承获得,语句会报错。

  1. 使用 SHOW ROLES 命令验证用户 “user1” 的默认角色:

以 user1 重新连接:

bendsql --user user1 --password abc123
SHOW ROLES;

writer 行的 is_current 和 is_default 均为 true。列表中仍包含 developer。

示例 4:设置和取消设置工作负载组​

CREATE USER user1 IDENTIFIED BY 'abc123';

ALTER USER user1 WITH SET WORKLOAD GROUP='wg';

ALTER USER user1 WITH SET WORKLOAD GROUP='wg1';

ALTER USER user1 WITH UNSET WORKLOAD GROUP;
欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验