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 极简教程ClickHouse SQL之数据定义语言 DDL

ClickHouse SQL 极简教程ClickHouse SQL 之数据控制语言 DCL

ClickHouse SQL 极简教程ClickHouse SQL 之数据查询语言 DQL

ClickHouse SQL 极简教程使用EXPLAIN 分析 SQL 执行计划

ClickHouse SQL 语法基础极简教程 + bitmap 位图数据类型的使用实例