1.1.
语言的数据控制( DCL ) 它是一种类似于计算机编程语言的语法,用于控制存储在数据库中的数据访问(授权)。特别是,它是一种结构化的查询语言(SQL) 的一个组件。语言的数据控制是 SQL 命令中的逻辑组之一。DCL 命令的示例包括:
1. GRANT允许指定用户执行指定任务。
2. REVOKE删除用户对数据库对象的可访问性。
ClickHouse 支持基于 RBAC(Role-Based Access Control) 的访问权限控制。本节主要介绍 ClickHouse 查询配额的权限管理和配置包括:用户管理、角色管理、战略管理和资源配额管理。
1.1.1.
ClickHouse 访问权限模型中的实体有:
1.用户帐户(User Account):用户账户是权限作用的实体,可以设置独立的密码和操作范围,DBA通过登陆不同的账户来行使不同的数据权限。
2.角色(Role):角色是权限的集合,用于定义用户行使权限的范围。
3.行策略(Row Policy):根据过滤条件创建银行策略,限制用户从表中读取哪些银行数据。
4.用户配置(Settings Profile)
a)可以在users.xml在用户配置节点中设置用户配置节点<clickhouse><profiles></profiles></clickhouse>,定义多组profile,并为每组profile限制资源的使用,定义不同的配置项,例如,限制一次查询的资源消耗(max_memory_usage)、限制单个用户使用的最大内存用量(max_memory_usage_for_user)等。
b)多个profile配置可重用。
c)修改了users.xml参数立即生效。
5.配额(Quota):配额,限制资源使用。配置时间间隔(interval),限制一定时间内的资源消耗。例如,配置时间周期(duration)内允许的请求总数(queries)、错误总数(errors)、允许返回的行数(result_rows)、读取的数据行数(read_rows)、允许执行的查询时间(execution_time)等。属性值为0,表示无限制。
可以通过 SQL 终端配置(CREATE/ALTER/DROP USER|ROLE|ROW POLICY| QUOTA等)或通过users.xml与config.xml设置配置文件(但同一访问实体不能通过两种配置方法同时管理)。例如,执行SHOW GRANTS查看用户授予的权限:
GRANT SHOW, SELECT, INSERT, ALTER, CREATE, DROP, TRUNCATE, OPTIMIZE, KILL QUERY, MOVE PARTITION BETWEEN SHARDS, SYSTEM, dictGet, INTROSPECTION, SOURCES ON *.* TO default
此时,我们无权查询系统用户信息:
SELECT *
FROM system.users
Query id: 037bf01e-bcc4-4dcf-b293-c82cdee7e763
0 rows in set. Elapsed: 0.001 sec.
Received exception from server (version 22.4.1):
Code: 497. DB::Exception: Received from 127.0.0.1:9009. DB::Exception: default: Not enough privileges. To execute this query it's necessary to have grant SHOW USERS ON *.*. (ACCESS_DENIED)
我们需要打开它 default 用户管理员的权限使 default用户可以创建其他用户并授予他们权限。
管理员账户主要用于权限分配和管理。管理权限需要打开users.xml配置如下:
在users.xml中的<clickhouse><users><default></default></users></clickhouse>新位置一行配置:<access_management>1</access_management>,配置如下:
<users>
<default>
<!-- PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-' -->
<!-- password 7Dv7Ib0g -->
<password_sha256_hex>0c9858b4a1fb6c66d637e6b3a5e0977912c22a9d2f77e007ef7594226af409f5</password_sha256_hex>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
<!-- User can create other users and grant rights to them. -->
</default>
...
</users>
access_management 默认为0,设置为1,标识开启管理员权限。在这个时候,我们不需要重启 ClickHouseServer,ClickHouse 监控配置文件的变更,ConfigReloader最新配置将自动加载。 我们修改完users.xml配置之后,ClickHouse 配置自动加载Server 端日志如下:
2022.03.25 18:20:03.930643 [ 3362581 ] {} <Debug> ConfigReloader: Loading config 'users.xml'
Processing configuration file 'users.xml'.
Saved preprocessed configuration to '/Users/data/clickhouse/preprocessed_configs/users.xml'.
2022.03.25 18:20:03.932980 [ 3362581 ] {} <Debug> ConfigReloader: Loaded config 'users.xml', performing update on configuration/p>