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

常见的访问管理查询

自管理

如果您正在使用自管理的 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. 创建测试数据库

  2. 创建一个表

  3. 用示例行填充表

  4. 验证表:

  5. 创建常规用户以演示限制对某些列的访问:

  6. 创建常规用户以演示限制对特定值的行的访问:

创建角色

通过这一组示例:

  • 将为不同权限(例如列和行)创建角色
  • 将权限授予角色
  • 将用户分配给每个角色

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

  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 用户和角色的基础知识,并提供了为用户和角色设置和修改权限的步骤。有关每个部分的更详细信息,请参阅我们的用户指南和参考文档。