当前位置:首页 > 编程笔记 > 正文
已解决

ClickHouse进阶(十九):clickhouse管理与运维-权限管理

来自网友在路上 160860提问 提问时间:2023-09-20 09:12:25阅读次数: 60

最佳答案 问答题库608位专家为你答疑解惑

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!

 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频


目录

1. 访问权限

1.1 网络访问权限

1.2 数据库与字典访问权限

2. ​​​​​​​查询权限

2.1 readonly

2.2allow_ddl

​​​​​​​3. 数据行级权限


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

​​​​​​​1. 访问权限

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

1.1 网络访问权限

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

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

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

[root@node1 logs]# clickhouse-client -u zhangsan --password 123456clickhouse client version 21.9.4.35 (official build).Connecting to localhost:9000 as user zhangsan.Code: 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)

1.2 数据库与字典访问权限

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

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

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

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

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

2. ​​​​​​​查询权限

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

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

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

2.1 readonly

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

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

2.2allow_ddl

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

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

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

查询权限测试如下:

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

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

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

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

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

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

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

​​​​​​​3. 数据行级权限

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

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

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

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

<zhangsan>... ...<databases><default><!-- 数据库名称 --><person_info><!-- 表名称 --><!-- 过滤条件id <=2 or id =4 --><filter>id<=2 or id=4 </filter> <!-- 数据过滤条件 --> </person_info></default></databases></zhangsan>注意:< 表示小于号
> 表示大于号

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

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

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


查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"ClickHouse进阶(十九):clickhouse管理与运维-权限管理":http://eshow365.cn/6-9904-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!