ClickHouse SQL 极简教程ClickHouse SQL 之数据控制语言 DCL
Posted 东海陈光剑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ClickHouse SQL 极简教程ClickHouse SQL 之数据控制语言 DCL相关的知识,希望对你有一定的参考价值。
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. -->
<access_management>1</access_management>
</default>
...
</users>
access_management 默认为0,设置为1,标识开启管理员权限。这个时候,我们无需重启 ClickHouse Server,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
以上是关于ClickHouse SQL 极简教程ClickHouse SQL 之数据控制语言 DCL的主要内容,如果未能解决你的问题,请参考以下文章
ClickHouse SQL 极简教程ClickHouse SQL之数据定义语言 DDL
ClickHouse SQL 极简教程ClickHouse SQL 之数据控制语言 DCL
ClickHouse SQL 极简教程ClickHouse SQL 之数据查询语言 DQL