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<=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└────┴──────┴─────┴────────┴──────────┘
可見配置的數據行級權限生效。
上一篇:theano的導數
下一篇:sin52度的近似根號表示







