访问权限和账户管理

ClickHouse支持基于RBAC的访问控制管理。

ClickHouse权限实体包括:
- 用户账户
- 角色
- 行策略
- 设置描述
- 配额

你可以通过如下方式配置权限实体:

  • 通过SQL驱动的工作流方式.

    你需要开启这个功能.

  • 服务端配置文件 users.xmlconfig.xml.

我们建议你使用SQL工作流的方式。当然配置的方式也可以同时起作用, 所以如果你正在用服务端配置的方式来管理权限和账户,你可以平滑的切换到SQL驱动的工作流方式。

警告

你无法同时使用两个配置的方式来管理同一个权限实体。

用法

默认ClickHouse提供了一个 default 账号,这个账号有所有的权限,但是不能使用SQL驱动方式的访问权限和账户管理。default主要用在用户名还未设置的情况,比如从客户端登录或者执行分布式查询。在分布式查询中如果服务端或者集群没有指定用户名密码那默认的账户就会被使用。

如果你刚开始使用ClickHouse,考虑如下场景:

  1. default 用户开启SQL驱动方式的访问权限和账户管理 .
  2. 使用 default 用户登录并且创建所需要的所有用户。 不要忘记创建管理员账户 (GRANT ALL ON *.* WITH GRANT OPTION TO admin_user_account)。
  3. 限制 default 用户的权限并且禁用SQL驱动方式的访问权限和账户管理。

当前解决方案的特性

  • 你甚至可以在数据库和表不存在的时候授予权限。
  • 如果表被删除,和这张表关联的特权不会被删除。这意味着如果你创建一张同名的表,所有的特权仍旧有效。如果想删除这张表关联的特权,你可以执行 REVOKE ALL PRIVILEGES ON db.table FROM ALL 查询。
  • 特权没有生命周期。

用户账户

用户账户是权限实体,用来授权操作ClickHouse,用户账户包含:

  • 标识符信息。
  • 特权用来定义用户可以执行的查询的范围。
  • 可以连接到ClickHouse的主机。
  • 指定或者默认的角色。
  • 用户登录的时候默认的限制设置。
  • 指定的设置描述。

特权可以通过GRANT查询授权给用户或者通过角色授予。如果想撤销特权,可以使用REVOKE查询。查询用户所有的特权,使用SHOW GRANTS语句。

查询管理:

设置应用规则

对于一个用户账户来说,设置可以通过多种方式配置:通过角色扮演和设置描述。对于一个登陆的账号来说,如果一个设置对应了多个不同的权限实体,这些设置的应用规则如下(优先权从高到底):

  1. 用户账户设置。
  2. 用户账号默认的角色设置。如果这个设置配置了多个角色,那设置的应用是没有规定的顺序。
  3. 从设置描述分批给用户或者角色的设置。如果这个设置配置了多个角色,那设置的应用是没有规定的顺序。
  4. 对所有服务器有效的默认或者default profile的设置。

角色

角色是权限实体的集合,可以被授予用户账号。

角色包括:

  • 特权
  • 设置和限制
  • 分配的角色列表

查询管理:

使用GRANT 查询可以把特权授予给角色。用REVOKE来撤回特权。

行策略

行策略是一个过滤器,用来定义哪些行数据可以被账户或者角色访问。对一个特定的表来说,行策略包括过滤器和使用这个策略的账户和角色。

查询管理:

设置描述

设置描述是设置的汇总。设置汇总包括设置和限制,当然也包括这些描述的对象:角色和账户。

查询管理:

配额

配额用来限制资源的使用情况。参考配额.

配额包括特定时间的限制条件和使用这个配额的账户和角色。

Management queries:

开启SQL驱动方式的访问权限和账户管理

  • 为配置的存储设置一个目录.

    ClickHouse把访问实体的相关配置存储在访问控制目录,而这个目录可以通过服务端进行配置.

  • 为至少一个账户开启SQL驱动方式的访问权限和账户管理.

    默认情况,SQL驱动方式的访问权限和账户管理对所有用户都是关闭的。你需要在 users.xml 中配置至少一个用户,并且把权限管理的值设置为1。