锅炉信息网 > 锅炉知识 > 锅炉百科

Clickhouse权限管理

发布时间:

转载自(该博客有很多数据库相关的文章):Lansonli:大数据ClickHouse进阶(二十四):ClickHouse权限管理ClickHouse权限管理ClickHouse从访问

转载自(该博客有很多数据库相关的文章):

Lansonli:大数据ClickHouse进阶(二十四):ClickHouse权限管理

ClickHouse权限管理

ClickHouse从访问、查询和数据角度提供了一个较为立体的权限体系。

一、​​​​​​​访问权限

访问权限是整个权限体系的第一层防护,可以分为两类权限。

1、网络访问权限

网络权限使用networks标签设置,用户限制某个用户登录的客户端地址,例如,修改users.xml文件:

<zhangsan>n <!-- 设置用户允许登录的网络地址 -->n <networks>n <!-- 限制在此ip登录 -->n <ip>192.168.179.5</ip>n </networks>n</zhangsan>

修改之后,在node1(192.168.179.4)上登录zhangsan用户登录不上。

[root@node1 logs]# ClickHouse-client -u zhangsan --password 123456nClickHouse client version 21.9.4.35 (official build).nConnecting to localhost:9000 as user zhangsan.nCode: 516. DB::Exception: Received from localhost:9000. DB::Exception: zhangsan: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED)

2、数据库与字典访问权限

当客户端连入ClickHouse之后,可以进一步限制某个用户数据库和字典的访问权限,可以通过<allow_database>和<allow_dictionaries>标签进行设置,如果不进行任何定义则表示不进行限制。

现在针对用户zhangsan只能使用default库,在users.xml中的配置如下:

<zhangsan>n <!-- 设置用户访问数据库 -->n <allow_databases>n <database>default</database>n <database>datasets</database>n </allow_databases>n</zhangsan>

配置完成之后,使用zhangsan用户重新登录ClickHouse,查看数据库:

node1 :) show databases;n┌─name─────┐n│ datasets │n│ default │n└──────────┘

二、​​​​​​​​​​​​​​查询权限

查询权限是整个权限体系的第二层防护,它决定了一个用户能够执行的查询语句,查询权限可以分为以下四类:

  • 读权限:包括SELECT、EXISTS、SHOW和DESCRIBE查询。
  • 写权限:包括INSERT和OPTIMIZE查询。
  • 设置权限:包括SET查询。
  • DDL权限:包括CREATE、DROP、ALTER、RENAME、ATTACH、DETACH和TRUNCATE查询。

上述四类权限,可以通过以下两项配置标签控制:

1、readonly

读权限、写权限和设置权限均由此标签控制,它有三种取值:

  • 当取值为0时,不进行任何限制(默认值)
  • 当取值为1时,只拥有读权限(只能执行SELECT、EXISTS、SHOW和DESCRIBE)
  • 当取值为2时,拥有读权限和设置权限(在读权限基础上,增加了SET查询)

2、allow_ddl

DDL权限由此标签控制,它有两种取值:

  • 当取值为0时,不允许DDL查询。
  • 当取值为1时,允许DDL查询(默认值)。

此外,需要注意的是readonly和allow_ddl需要定义在用户使用的profiles角色中。

查询权限测试如下:

首先,在users.xml中增加新角色normal,并配置只有read读权限,配置如下:

<yandex>n <!-- 配置profiles -->n <profiles>n ... ...n <!-- 自定义角色normal,只有read读权限 -->n <normal>n <readonly>1</readonly> n <allow_ddl>0</allow_ddl>n </normal>n ... ...n </profiles>n ... ...n</yandex>

其次在users.xml中给zhangsan配置角色为normal:

<!-- 用户使用的profile 角色 -->n<zhangsan>n... ...n <profile>normal</profile>n</zhangsan>

配置完成之后,使用用户zhangsan登录ClickHouse,做如下操作:

#创建数据库nnode1 :) create database aaa;n DB::Exception: zhangsan: Not enough privileges. To execute this query it's necessary to have grant CREATE DATABASE ON aaa.*. (ACCESS_DENIED)nn#查询表person_info中数据nnode1 :) select * from person_info;n┌─id─┬─name─┬─age─┬─gender─┬─loc─────┐n│ 1 │ zs │ 18 │ m │ beijing │n│ 3 │ ww │ 20 │ m │ beijing │n└────┴──────┴─────┴────────┴─────────┘n┌─id─┬─name─┬─age─┬─gender─┬─loc──────┐n│ 2 │ ls │ 19 │ f │ shanghai │n│ 4 │ ml │ 21 │ m │ shanghai │n└────┴──────┴─────┴────────┴──────────┘nn#向表person_info中插入数据nnode1 :) insert into person_info values (5,'xx',10,'f','beijing');nDB::Exception: zhangsan: Cannot execute query in readonly mode. (READONLY)

通过以上测试我们发现权限已经生效。

三、​​​​​​​​​​​​​​数据行级权限

数据权限是整个权限体系中的第三层防护,决定了一个用户能够看到什么数据。数据权限使用database标签定义,是用户定义中的一项选填设置,database通过定义用户级别的查询过滤器来实现数据的行级粒度权限,定义规则如下:

<databases>n <database_name><!-- 数据库名称 -->n <table_name><!-- 表名称 -->n <filter>id < 10</filter><!-- 数据过滤条件 -->n </table_name>n </database_name>n</databases>

以上标签中database_name是数据库名称,table_name是表名称,而filter则是权限过滤的关键,等同于定义了一条where条件,支持组合条件。

下面测试数据权限,给用户zhangsan限制读取表person_info数据中id<=2 或者id=4的数据,配置users.xml如下:

<zhangsan>n ... ...n <databases>n <default><!-- 数据库名称 -->n <person_info><!-- 表名称 -->n <!-- 过滤条件id <=2 or id =4 -->n <filter>id&lt;=2 or id=4 </filter> <!-- 数据过滤条件 --> </person_info>n </default>n </databases>n</zhangsan>

注意:

  • < 表示小于号
  • 表示大于号

以上配置完成之后,使用zhangsan登录ClickHouse查询数据,结果如下:

node1 :) select * from person_info;n┌─id─┬─name─┬─age─┬─gender─┬─loc─────┐n│ 1 │ zs │ 18 │ m │ beijing │n└────┴──────┴─────┴────────┴─────────┘n┌─id─┬─name─┬─age─┬─gender─┬─loc──────┐n│ 2 │ ls │ 19 │ f │ shanghai │n│ 4 │ ml │ 21 │ m │ shanghai │n└────┴──────┴─────┴────────┴──────────┘

可见配置的数据行级权限生效。

精选推荐

  • 711关东煮供应商
    711关东煮供应商

    今天给大家介绍三位,奶粉,全家、罗森这些便利店里关东煮的供应商。店里卖三四块钱一串的关东煮,在网上买不到,一块钱就搞定。首先关东

  • 健康日历|高压锅容易爆炸的4个原因
    健康日历|高压锅容易爆炸的4个原因

    来源:医药养生保健报设计:李雅琴医学审核:姜峰出品人:胡丽丽

  • 高炉
    高炉

    今天这活却是个白事,等到了时辰,那家人便准备火化,本来准备送普炉,我却心中一动,便对那家人说道:“这老人走也不要省,还是送高炉吧。”

  • 高压锅和电压力锅的区别,推荐几款点压力锅
    高压锅和电压力锅的区别,推荐几款点压

    记得之前有一次去朋友家玩,他正在用高压锅煮小米粥,是的,高压锅压小米粥,大概煮了半小时,高压锅突然爆炸了,现场惨不忍睹啊,幸好厨房里没

0