管理数据库用户
本指南介绍了两种管理数据库用户的方式:在 SQL 控制台中管理,以及直接在数据库中管理。
SQL 控制台免密认证
SQL 控制台用户会为每个会话单独创建,并使用会自动轮换的 X.509 证书进行身份验证。会话终止时,该用户会被删除。在为审计生成访问列表时,请在控制台中进入相应服务的 Settings 选项卡,在记录数据库中现有数据库用户的同时,也一并记录 SQL 控制台访问情况。如果配置了自定义角色,用户的访问权限会列在以该用户用户名结尾的角色中。
SQL 控制台用户和角色
具有 Service Read Only 和 Service Admin 权限的用户可以被分配基本的 SQL 控制台角色。有关更多信息,请参阅 管理 SQL 控制台角色分配。本指南演示如何为 SQL 控制台用户创建自定义角色。
要为 SQL 控制台用户创建自定义角色并为其授予通用角色,请运行以下命令。电子邮件地址必须与该用户在控制台中的电子邮件地址一致。
数据库身份验证
数据库用户 ID 和密码
在创建用户账户时使用 SHA256_hash 方法来保护密码。ClickHouse 数据库密码长度至少为 12 个字符,并且必须满足复杂性要求:包含大写字符、小写字符、数字和/或特殊字符。
由于非管理员用户无法自行设置密码,请让用户先使用诸如此工具之类的生成器对其密码进行哈希处理,然后再将生成的哈希值提供给管理员以设置账户。
使用安全外壳(SSH)身份验证的数据库用户
为 ClickHouse Cloud 数据库用户配置 SSH 身份验证。
- 使用 ssh-keygen 创建一对密钥。
- 使用公钥创建用户。
- 为该用户分配角色和/或权限。
- 使用私钥对服务进行身份验证。
如需包含示例的详细操作说明,请参阅我们知识库中的如何使用 SSH 密钥连接到 ClickHouse Cloud。
数据库权限
在服务和数据库中使用 SQL GRANT 语句配置以下内容。
| 角色 | 描述 |
|---|---|
| Default | 对服务具有完整的管理访问权限 |
| Custom | 使用 SQL GRANT 语句进行配置 |
- 数据库角色具有叠加效果。也就是说,如果一个用户同时属于两个角色,该用户将拥有这两个角色中权限更高的一方所授予的访问权限。添加角色不会导致用户失去访问权限。
- 数据库角色可以授予给其他角色,从而形成分层结构。角色会继承其作为成员角色的所有权限。
- 数据库角色在每个服务内是唯一的,并且可以应用到同一服务内的多个数据库。
下图展示了用户可以被授予权限的不同方式。

初始设置
数据库中有一个名为 default 的账户,在创建服务时会自动添加,并被授予 default_role。创建服务的用户在服务创建时会看到自动生成并随机分配给 default 账户的密码。该密码在初始设置之后将不会再次显示,但之后可以由控制台中具有 Service Admin 权限的任意用户进行修改。该账户或在控制台中具有 Service Admin 权限的账户可以在任何时间创建其他数据库用户和角色。
要在控制台中更改分配给 default 账户的密码,请在左侧进入 Services 菜单,打开对应服务,进入 Settings 选项卡,然后点击 Reset password 按钮。
我们建议创建一个与具体个人关联的新用户账户,并为该用户授予 default_role。这样可以确保用户执行的操作能够映射到其各自的用户 ID,同时将 default 账户保留用于紧急兜底(break-glass)类操作场景。
用户可以使用 SHA256 哈希生成器,或使用 Python 中的 hashlib 等代码函数,将一个长度不少于 12 个字符且复杂度足够的密码转换为 SHA256 字符串,并将该字符串作为密码提供给系统管理员。这样可以确保管理员不会看到或接触明文密码。
使用 SQL 控制台用户生成数据库访问清单
以下流程可用于在你的组织中生成涵盖 SQL 控制台及各数据库的完整访问清单。
将授权列表关联到拥有 SQL 控制台访问权限的 Console 用户
将此列表与拥有 SQL 控制台访问权限的 Console 用户进行关联。
a. 进入 Console。
b. 选择相关的服务(service)。
c. 在左侧选择设置(Settings)。
d. 向下滚动到 SQL console access 部分。
e. 点击显示具有该服务数据库访问权限用户数量的链接 There are # users with access to this service.,以查看用户列表。
Warehouse users
Warehouse 用户在同一 Warehouse 内由各服务共享。有关详细信息,请参阅 Warehouse 访问控制。