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

常见访问管理查询

自管理

如果您正在使用自管理的 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,其为只读权限。

管理员用户默认分配 sql_console_admin 角色,因此对他们没有变化。然而,sql_console_read_only 角色允许非管理员用户被授予任何实例的只读或完全访问权限。管理员需要配置此访问权限。可以使用 GRANTREVOKE 命令来调整角色,以更好地满足特定实例的需求,并且对这些角色所做的任何修改将被持久化。

细粒度访问控制

此访问控制功能还可以手动配置以实现用户级别的细粒度控制。在将新的 sql_console_* 角色分配给用户之前,应创建与命名空间 sql-console-role:<email> 匹配的 SQL 控制台用户特定数据库角色。例如:

当检测到匹配角色时,它将分配给用户,而不是使用模板角色。这引入了更复杂的访问控制配置,例如创建角色 sql_console_sa_rolesql_console_pm_role 并将其授予特定用户。例如:

测试管理员权限

注销 default 用户并以 clickhouse_admin 用户身份登录。

所有这些都应该成功:

非管理员用户

用户应具备必要的权限,而并非所有用户都是管理员。本文档的其余部分提供了示例场景和所需的角色。

准备工作

创建这些表和用户以供示例使用。

创建示例数据库、表和行

  1. 创建一个测试数据库
  1. 创建一个表
  1. 用示例行填充该表
  1. 验证该表:
  1. 创建一个普通用户,用于演示限制对某些列的访问:
  1. 创建一个普通用户,用于演示限制对某些值的行的访问:

创建角色

通过这一系列示例:

  • 将为不同的权限(如列和行)创建角色
  • 将权限授予角色
  • 用户将被分配到各个角色

角色用于定义特定权限的用户组,而不是单独管理每个用户。

  1. 创建一个角色,限制该角色的用户只能在 db1 数据库和 table1 表中查看 column1
  1. 设置权限以允许查看 column1
  1. column_user 用户添加到 column1_users 角色
  1. 创建一个角色,限制该角色的用户只能查看选定的行,在本例中,仅包含 column1 中值为 A 的行
  1. row_user 添加到 A_rows_users 角色
  1. 创建一个策略,仅允许查看 column1 的值为 A 的行
  1. 设置数据库和表的权限
  1. 明确授予其他角色仍然能够访问所有行的权限
备注

附加策略到表时,系统将应用该策略,仅定义的用户和角色将能够对该表进行操作,所有其他用户将被拒绝任何操作。为了不对其他用户应用限制行策略,必须定义另一策略,以允许其他用户和角色具有常规或其他类型的访问权限。

验证

测试带列限制用户的角色权限

  1. 使用 clickhouse_admin 用户登录 ClickHouse 客户端
  1. 使用管理员用户验证对数据库、表和所有行的访问。
  1. 使用 column_user 用户登录 ClickHouse 客户端
  1. 测试使用所有列的 SELECT
备注

访问被拒绝,因为指定了所有列,而用户仅对 idcolumn1 有访问权限

  1. 验证仅指定和允许的列的 SELECT 查询:

测试带行限制用户的角色权限

  1. 使用 row_user 登录 ClickHouse 客户端
  1. 查看可用行
备注

验证仅返回上述两行,column1 中值为 B 的行应被排除。

修改用户和角色

用户可以被分配多个角色,以获得所需的权限组合。当使用多个角色时,系统将组合这些角色以确定权限,最终效果将是角色权限的累积。

例如,如果一个 role1 只允许在 column1 上进行选择,而 role2 允许在 column1column2 上进行选择,则用户将同时访问这两列。

  1. 使用管理员帐户,创建新用户以通过行和列的默认角色进行限制
  1. 移除 A_rows_users 角色的先前权限
  1. 允许 A_row_users 角色仅从 column1 中选择
  1. 使用 row_and_column_user 登录 ClickHouse 客户端
  1. 测试所有列:
  1. 测试有限允许的列:

排错

有时权限交叉或组合会产生意外结果,以下命令可用于使用管理员帐户缩小问题范围

列出用户的授权和角色

列出 ClickHouse 中的角色

显示策略

查看策略是如何定义的及当前权限

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

以下命令可用于:

  • 删除权限
  • 删除策略
  • 取消用户与角色的关联
  • 删除用户和角色
提示

以管理员用户或 default 用户身份运行这些命令

从角色中移除权限

删除策略

取消用户与角色的关联

删除角色

删除用户

摘要

本文展示了创建 SQL 用户和角色的基础知识,并提供了设置和修改用户和角色权限的步骤。有关每个内容的更详细信息,请参阅我们的用户指南和参考文档。