跳转到主要内容
自管理如果你使用的是自管理 ClickHouse,请参阅 SQL 用户和角色
本文介绍定义 SQL 用户和角色的基础知识,以及如何将这些特权和权限应用于数据库、表、行和列。

管理员用户

ClickHouse Cloud 服务有一个管理员用户 default,会在服务创建时自动创建。密码会在创建服务时提供,并且拥有 Admin 角色的 ClickHouse Cloud 用户可以重置该密码。 当你为 ClickHouse Cloud 服务添加额外的 SQL 用户时,他们需要提供 SQL 用户名和密码。如果你希望他们拥有管理员级别的特权,请为这些新用户分配 default_role 角色。例如,添加用户 clickhouse_admin
使用 SQL 控制台时,你的 SQL 语句不会以 default 用户身份执行。相反,这些语句会以名为 sql-console:${cloud_login_email} 的用户身份执行,其中 cloud_login_email 是当前运行查询的用户的电子邮件地址。这些自动生成的 SQL 控制台用户具有 default 角色。

无密码身份验证

SQL 控制台提供两个角色:sql_console_admin,其 权限 与 default_role 完全一致;以及 sql_console_read_only,具有只读权限。 Admin 用户默认会被分配 sql_console_admin 角色,因此对他们来说无需做任何更改。不过,sql_console_read_only 角色使非 Admin 用户也可以被授予任意 instance 的只读或完全访问权限。此类访问需要由 Admin 配置。可以使用 GRANTREVOKE 命令调整这些角色,以更好地满足特定 instance 的需求,并且对这些角色所做的任何修改都会被保留。

细粒度访问控制

此访问控制功能也支持手动配置到用户级粒度。为用户分配新的 sql_console_* 角色之前,应先创建与命名空间 sql-console-role:<email> 对应的 SQL 控制台用户专用数据库角色。例如:
检测到匹配的角色后,系统会将其分配给用户,而不是默认的样板角色。这也支持更复杂的访问控制配置,例如创建 sql_console_sa_rolesql_console_pm_role 这类角色,并将其授予特定用户。例如:

测试管理员权限

退出 default 用户登录,然后使用 clickhouse_admin 用户重新登录。 以下所有操作都应成功:

非管理员用户

用户应具备必要的权限,而不应全部为管理员用户。本文档其余部分将提供示例场景及所需角色。

准备工作

创建以下表和用户,供后续示例使用。

创建示例数据库、表和行

1
创建测试数据库
2
创建表
3
向表中插入示例行
4
验证表
查询
响应
5
创建 column_user
创建一个普通用户,用于演示对某些列的访问限制:
6
创建 row_user
创建一个普通用户,用于演示对具有特定值的行实施访问限制:

创建角色

通过这组示例,您将了解如何:
  • 创建具有不同权限的角色,例如针对列和行的角色
  • 为角色授予权限
  • 将用户分配给各个角色
角色用于为特定权限定义用户组,而不是逐个管理用户。
1
创建一个角色,将该角色的用户限制为只能查看数据库 db1table1 表的 column1
2
设置权限,允许查看 column1
3
将用户 column_user 添加到角色 column1_users
4
创建一个角色,将该角色的用户限制为只能查看选定的行;在本例中,仅能查看 column1 中包含 A 的行
5
row_user 添加到角色 A_rows_users
6
创建一条策略,仅允许查看 column1 值为 A 的行
7
为数据库和表设置权限
8
为其他角色授予显式权限,使其仍可访问所有行
将策略附加到表后,系统会应用该策略,只有策略中定义的用户和角色才能对该表执行操作,其他所有用户和角色都将被拒绝执行任何操作。为了避免将这种限制性的行策略应用到其他用户,必须另外定义一条策略,以允许其他用户和角色保留常规访问权限或其他类型的访问权限。

验证

使用列受限用户测试角色权限

1
使用 clickhouse_admin 用户登录 ClickHouse 客户端
2
验证管理员用户对数据库、表和所有行的访问权限。
3
使用 column_user 用户登录 ClickHouse 客户端
4
测试使用所有列执行 SELECT
由于查询指定了所有列,而该用户仅有对 idcolumn1 的访问权限,因此访问被拒绝。
5
验证仅查询已指定且允许访问的列的 SELECT 查询:

使用行级受限用户测试角色权限

1
使用 row_user 登录 ClickHouse 客户端
2
查看可访问的行
确认只返回上述两行,column1 中值为 B 的行应被排除。

修改用户和角色

可以为用户分配多个角色,以组合获得所需的权限。使用多个角色时,系统会将这些角色合并后再判定权限,最终效果是各角色的权限会累加生效。 例如,如果 role1 只允许查询 column1,而 role2 允许查询 column1column2,那么该用户将有权访问这两列。
1
使用管理员账户,创建一个按行和列限制且带默认角色的新用户
2
移除 A_rows_users 角色先前的权限
3
仅允许 A_row_users 角色查询 column1
4
使用 row_and_column_user 登录 ClickHouse 客户端
5
使用所有列进行测试:
6
使用受限的允许列进行测试:

故障排查

在某些情况下,权限之间会相互叠加或组合,导致出现意料之外的结果。以下命令可用于通过管理员账户缩小排查范围

列出用户的授权和角色

查看 ClickHouse 中的角色

查看策略

查看策略定义及当前权限

管理角色、策略和用户的示例命令

以下命令可用于:
  • 删除权限
  • 删除策略
  • 将用户从角色中移除
  • 删除用户和角色
请以管理员用户或 default 用户身份运行这些命令

撤销角色权限

删除策略

取消向用户分配角色

删除角色

删除用户

总结

本文介绍了创建 SQL 用户和角色的基础知识,并说明了如何为用户和角色设置及修改权限。有关各项内容的更多信息,请参阅我们的用户指南和参考文档。
最后修改于 2026年6月12日