Skip to main content
当您在 ClickHouse Cloud SQL 控制台中运行 SET ROLE 时,角色似乎会在单次查询中更改,但在下一次查询时又恢复原状。如果权限需要跨查询和会话持续生效,请设置用户专属 SQL 控制台角色。

症状

您可能会遇到以下一种或多种情况:
  • 运行 SET ROLE sql_console_developer 后,后续查询仍使用 sql_console_read_only
  • currentRolesenabledRolesdefaultRoles 的结果因查询而异。
  • 同时运行 SET ROLE 和另一条查询时,无法始终保留所选角色。
  • SHOW GRANTS 列出了预期角色,但其权限未生效。
您可以通过以下方式查看当前用户和角色:

为什么会出现这种情况

SQL 控制台通过无状态 HTTP 连接向多副本 ClickHouse Cloud 服务发送查询。连续执行的查询不一定会使用同一连接或副本。 SET ROLE 会更改当前会话中启用的角色,但不会将该会话状态保留到后续的 SQL 控制台请求中。因此,后续查询可能不会使用先前请求启用的角色运行。 因此,请勿将 SET ROLE 用作 SQL 控制台中的持久性访问控制机制。

SQL 控制台用户角色的工作原理

当用户打开 SQL 控制台时,ClickHouse Cloud 会按以下命名规则创建一个数据库用户:
ClickHouse Cloud 还会检查名称符合以下约定的数据库角色:
当该角色存在时,ClickHouse Cloud 会将其分配给相应的 SQL 控制台用户。这是向单个 SQL 控制台用户授予持久性自定义权限的受支持方式。

配置持久权限

请使用在该服务上具有管理特权的用户运行以下语句,例如具有 sql_console_admin 角色的 SQL 控制台用户,或拥有 ACCESS MANAGEMENT 特权的其他用户。
1

创建自定义角色

以下示例创建自定义 sql_console_developer 角色,并授予其对 my_database 的权限:
sql_console_developer 是示例角色,并非 ClickHouse Cloud 内置角色。您也可以使用现有的自定义角色,只要该角色具备用户所需的权限即可。
2

创建用户专属 SQL 控制台角色

创建一个名称中包含用户完整电子邮件地址的角色:
由于角色名称中包含特殊字符,必须使用反引号。
3

授予自定义角色

将所需角色授予用户专属 SQL 控制台角色:
如有需要,可以授予多个角色:
4

启动新的 SQL 控制台会话

请用户退出 SQL 控制台后重新登录,或刷新浏览器选项卡。在新会话中,ClickHouse Cloud 会将 sql-console-role:user@example.com 应用于 sql-console:user@example.com;无需执行 SET ROLE 语句。验证已启用角色:
结果中应包含通过 sql-console-role:user@example.com 授予的权限。

避免修改托管角色

请勿修改 sql_console_adminsql_console_read_only 来授予自定义权限。这些内置角色由 ClickHouse Cloud 管理。若要为单个用户设置权限,请使用 sql-console-role:<email> 有关角色管理的一般示例,请参阅常见访问管理查询
最后修改于 2026年8月14日