大数据ClickHouse进阶(二十四):ClickHouse权限管理
ClickHouse权限管理
ClickHouse从访问、查询和数据角度提供了一个较为立体的权限体系。
一、访问权限
访问权限是整个权限体系的第一层防护,可以分为两类权限。
1、网络访问权限
网络权限使用networks标签设置,用户限制某个用户登录的客户端地址,例如,修改users.xml文件:
修改之后,在node1(192.168.179.4)上登录zhangsan用户登录不上。
2、数据库与字典访问权限
当客户端连入ClickHouse之后,可以进一步限制某个用户数据库和字典的访问权限,可以通过<allow_database>和<allow_dictionaries>标签进行设置,如果不进行任何定义则表示不进行限制。
现在针对用户zhangsan只能使用default库,在users.xml中的配置如下:
配置完成之后,使用zhangsan用户重新登录ClickHouse,查看数据库:
二、查询权限
查询权限是整个权限体系的第二层防护,它决定了一个用户能够执行的查询语句,查询权限可以分为以下四类:
- 读权限:包括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读权限,配置如下:
其次在users.xml中给zhangsan配置角色为normal:
配置完成之后,使用用户zhangsan登录ClickHouse,做如下操作:
通过以上测试我们发现权限已经生效。
三、数据行级权限
数据权限是整个权限体系中的第三层防护,决定了一个用户能够看到什么数据。数据权限使用database标签定义,是用户定义中的一项选填设置,database通过定义用户级别的查询过滤器来实现数据的行级粒度权限,定义规则如下:
以上标签中database_name是数据库名称,table_name是表名称,而filter则是权限过滤的关键,等同于定义了一条where条件,支持组合条件。
下面测试数据权限,给用户zhangsan限制读取表person_info数据中id<=2 或者id=4的数据,配置users.xml如下:
注意:
- < 表示小于号
-
> 表示大于号
以上配置完成之后,使用zhangsan登录ClickHouse查询数据,结果如下:
可见配置的数据行级权限生效。
- 点赞
- 收藏
- 关注作者
评论(0)