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的主要内容,如果未能解决你的问题,请参考以下文章