参考网页:
ClickHouse的用户及访问权限控制均可由配置文件直接进行标准化配置,一般由users.xml
文件设置,该文件名在/etc/clickhouse-server/config.xml中修改,详情可参考clickhouse-server配置文件详解 ,若需要对某一个用户单独设置例如dba用户,可放入/etc/clickhouse-server/users.d/dba.xml
,下面会描述该文件的配置示例。
一、users.xml文件示例 以下是一个标准默认的users.xml
用户配置示例,可直接测试使用,对用户的权限管理将会单独使用一篇文章来进行说明,后面将会对该文件分开描述。
有文件中可以看出users.xml主要由以下三部分设置组成:
profile:类似于用户角色,可以实现最大内存、负载方式等配置的服用
users:设置包括用户名、密码、权限等
quotas:限制一段时间内的资源使用等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 <?xml version="1.0"?> <yandex > <profiles > <default > <max_memory_usage > 10000000000</max_memory_usage > <load_balancing > random</load_balancing > <constraints > <max_memory_usage > <min > 5000000000</min > <max > 20000000000</max > </max_memory_usage > <load_balancing > <readonly /> </load_balancing > </constraints > </default > </default > <readonly > <readonly > 1</readonly > </readonly > </profiles > <users > <default > <password > </password > <networks incl ="networks" replace ="replace" > <ip > ::1</ip > <ip > 127.0.0.1</ip > </networks > <profile > default</profile > <quota > default</quota > </default > <seluser > <password > meiyoumima</password > <networks incl ="networks" replace ="replace" > <ip > ::/0</ip > </networks > <profile > readonly</profile > <quota > default</quota > </seluser > <inuser > <password > meiyoumima</password > <networks incl ="networks" replace ="replace" > <ip > ::/0</ip > </networks > <profile > default</profile > <quota > default</quota > </inuser > </users > <quotas > <default > <interval > <duration > 3600</duration > <queries > 0</queries > <errors > 0</errors > <result_rows > 0</result_rows > <read_rows > 0</read_rows > <execution_time > 0</execution_time > </interval > </default > </quotas > </yandex >
二、profile设置详解 users.xml
用户配置文件中profiles
部分定义了一些可复用的配置,他的作用类似于用户角色,可定义多个profile,并为不同的profile定义不同的配置,其中每个参数的含义可参考前面的参考网页二,并在后续使用中不断完善,以下面配置为例:
1、profile配置详情 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <yandex > <profiles > <default > <max_memory_usage > 10000000000</max_memory_usage > <load_balancing > random</load_balancing > <constraints > <max_memory_usage > <min > 5000000000</min > <max > 20000000000</max > </max_memory_usage > <load_balancing > <readonly /> </load_balancing > </constraints > </default > <readonly > <readonly > 1</readonly > </readonly > </profiles >
2、profile配置约束 profile中有约束条件,从而限制其中的参数值被任意修改,约束条件有三种规则:
Min:最小值约束,对应参数取值不能小于该值
Max:最大值约束,对应参数取值不能大雨该值
Readonly:只读约束,对应参数禁止修改
profile中default的constraints配置约束会作为全局约束,自动被其他profile继承。
以上述配置示例,将default用户角色中的max_memory_usage
设置了默认值以及最大最小阈值,load_balancing
设置为了只读,对其配置进行测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@xxxx docker_compose] root@clickhouse-server_1:/ ClickHouse client version 20.3.4.10 (official build). Connecting to localhost:9000 as user default. Connected to ClickHouse server version 20.3.4 revision 54433. clickhouse-server_1 :) set max_memory_usage = 50 SET max_memory_usage = 50 Received exception from server (version 20.3.4): Code: 452. DB::Exception: Received from localhost:9000. DB::Exception: Setting max_memory_usage shouldn't be less than 5000000000. 0 rows in set. Elapsed: 0.058 sec. ## 修改load_balancing,禁止修改该值 clickhouse-server_1 :) set load_balancing = ' nearest_hostname' SET load_balancing = ' nearest_hostname' Received exception from server (version 20.3.4): Code: 452. DB::Exception: Received from localhost:9000. DB::Exception: Setting load_balancing should not be changed. 0 rows in set. Elapsed: 0.001 sec.
3、profile切换和继承 1、profile切换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 clickhouse-server_1 :) set profile = 'readonly' SET profile = 'readonly' Ok. 0 rows in set . Elapsed: 0.001 sec. clickhouse-server_1 :) set max_memory_usage = 10000000001 SET max_memory_usage = 10000000001 Received exception from server (version 20.3.4): Code: 164. DB::Exception: Received from localhost:9000. DB::Exception: Cannot modify 'max_memory_usage' setting in readonly mode. 0 rows in set . Elapsed: 0.001 sec.
2、profile继承
profile配置支持继承,实现继承的方式是在profile配置中先引入其他的profile名称,但若有冲突,后面的配置会覆盖之前继承的配置,示例如下:
1 2 3 4 5 6 7 8 9 10 11 <profiles > <test1 > <allow_experimental_live_view > 1</allow_experimental_live_view > <distributed_product_mode > allow</distributed_product_mode > </test1 > <normal_inherit > <profile > test1</profile > <distributed_product_mode > deny</distributed_product_mode > </normal_inherit > </profiles >
三、users配置详解 users.xml
用户配置文件中users模块可以自定义配置用户属性,例如用户名、密码、权限等,用官网默认配置会发现users.xml
文件中会默认创建default用户,使用clickhouse-client
无参数登陆会通过该用户登陆,将以下面的示例进行说明:
1、users配置详情 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <users > <default > <password > </password > <networks incl ="networks" replace ="replace" > <ip > ::1</ip > <ip > 127.0.0.1</ip > </networks > <profile > default</profile > <quota > default</quota > </default > <seluser > <password > meiyoumima</password > <networks incl ="networks" replace ="replace" > <ip > ::/0</ip > </networks > <profile > readonly</profile > <quota > default</quota > </seluser > <inuser > <password > meiyoumima</password > <networks incl ="networks" replace ="replace" > <ip > ::/0</ip > </networks > <profile > default</profile > <quota > default</quota > </inuser > </users >
2、users属性详解 一个完整的用户设置,需要包含下面的属性
username:用户名
password:密码设置
networks:网络设置,一般用来限制可登陆的客户端地址
profile:该用户所使用的profile
quota
1. username
1 2 3 4 5 6 7 8 9 10 11 12 13 <users > <default > <password > </password > <networks incl ="networks" replace ="replace" > <ip > ::1</ip > <ip > 127.0.0.1</ip > </networks > <profile > default</profile > <quota > default</quota > </default >
2. password
登陆密码,clickhouse支持明文、SHA256加密、double_sha1 三种设置方式,但SHA256和sha1都是散列算法,明文和密文一一对应,也可通过密文很容易进行解密…
1 2 3 4 <password > meiyoumima</password > <password > </password >
1 2 3 4 5 6 7 [root@xxxx docker_compose] RSZ4QZMc 21d076f8340b5d836769a35c4d658d7b3091e7e1ccb18d66e9e1a7b6eef823df [root@xxxx docker_compose] (stdin)= a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
1 2 <password_sha256_hex > 21d076f8340b5d836769a35c4d658d7b3091e7e1ccb18d66e9e1a7b6eef823df</password_sha256_hex >
1 2 3 4 5 6 7 [root@xxxx docker_compose] +0agrMRX 407732ce14cdea57dc0a2ff9c64773472f8cd666 [root@xxxx docker_compose] (stdin)= 23ae809ddacaf96af0fd78ed04b6a265e05aa257
1 2 <password_double_sha1_hex > 407732ce14cdea57dc0a2ff9c64773472f8cd666</password_double_sha1_hex >
3. networks
networks表示允许被登陆clickhouse服务器的客户端列表,支持通过ip、host、host_regexp方式设置
1 2 3 4 5 6 7 8 9 <ip > 1.1.1.1</ip > <ip > 10.0.0.1/8</ip > <ip > ::/0</ip > <ip > ::1</ip > <ip > 127.0.0.1</ip >
1 <host > example1.host.com</host >
1 2 <host_regexp > ^example\d\d-\d\d-\d\.host\.ru$</host_regexp >
4. profile设置
该用户所使用的profile设置,直接写入即可
1 2 3 <default > <profile > default</profile > </default >
5. quota设置
该用户单位时间内的资源限制,直接使用quotas设置的名称即可
6. database设置
该设置可以限制当前用户select时返回的行,以完成简单的行数据安全,示例如下:
1 2 3 4 5 6 7 8 9 10 <user1 > <databases > <database_name > <table1 > <filter > id = 1000</filter > </table1 > </database_name > </databases > </user1 >
四、quotas配置详解 1、quotas配置详情 users.xml
配置文件中的quotas标签是限制了单位时间内的系统资源使用量,而不是限制单个查询的系统资源使用量**(server的配置可以设置限制单个查询的系统资源的使用量),值为0表示不限制,如下面示例所示,表示 仅跟踪每小时的资源消耗,而不限制使用情况**,当设置阈值之后,对应资源达到阈值,正在进行的操作也会中断。
1 2 3 4 5 6 7 8 9 10 11 12 <quotas > <default > <interval > <duration > 3600</duration > <queries > 0</queries > <errors > 0</errors > <result_rows > 0</result_rows > <read_rows > 0</read_rows > <execution_time > 0</execution_time > </interval > </default > </quotas >
2、quotas属性详解 1. duration设置
duration表示累计的时间周期,单位为秒,达到该时间周期后,清除所有收集的值,接下来的周期,将重新开始计算,当服务重启时,也会清除所有的值,重新开始新的周期。
1 <duration > 3600</duration >
2. queris设置
queris表示在该周期内,允许执行的查询次数,0为不限制。
1 2 <queries > 1000</queries >
3. errors设置
errors表示在该周期内,允许引发异常的查询次数,0为不限制。
4. result_rows设置
result_rows表示在周期内,允许查询返回的结果行数,0为不限制。
1 <result_rows > 0</result_rows >
5. read_rows设置
read_rows表示在周期内,允许远程节点读取的数据行数,0为不限制。
1 <read_rows > 0</read_rows >
6. execution_time设置
execution_time表示允许查询的总执行时间(又叫wall time),单位为秒,0为不限制。
1 <execution_time > 0</execution_time >