研究ClickHouse也有幾周了,今天來和你們說說ClickHouse的訪問權限是怎麼作的,ClickHouse不像MySQL那樣,直接建立用戶,而是須要在配置文件裏面添加用戶,一個簡單的例子以下:html
<dba> <password_sha256_hex>60cd41aedc4e47e8883682b416109e7b7e345e15decc63c2c98ecdab5e8e053a</password_sha256_hex> <networks incl="networks" /> <profile>readonly</profile> <quota>default</quota> <allow_databases> <database>default</database> </allow_databases> </dba>
默認的配置文件路徑是:/etc/clickhouse-server
其中有config.xml,users.xml,一個是服務器相關配置,一個是用戶權限的配置。下面看看users.xml。這裏面分幾部分。數據庫
1. 用戶名,用戶密碼,訪問來源地址服務器
2. 資源限制,和greenplum有點像。dom
3. 配置設置,這其中有用戶是否只讀。ck目前只有select和insert。因此權限也比較簡單。spa
密碼須要特殊說明,若是不寫,那麼就是空密碼,也能夠寫明文密碼,也能夠寫密文,能夠用以下命令生成密文密碼:code
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
[root@db_server_yayun_03 ~]# PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-' AwBtorOK 4e588aea92dc77d0960505f6ff5e843eab388c28f1c85fae9df917f89ebb0ed6
其中AwBtorOK就是用戶的密碼,4e588aea92dc77d0960505f6ff5e843eab388c28f1c85fae9df917f89ebb0ed6就是密文,須要寫在配置文件裏面。下面說說剛開始提到的:server
<dba> <password_sha256_hex>60cd41aedc4e47e8883682b416109e7b7e345e15decc63c2c98ecdab5e8e053a</password_sha256_hex> <networks incl="networks" /> <profile>readonly</profile> <quota>default</quota> <allow_databases> <database>default</database> </allow_databases> </dba>
這段的意思就是添加一個dba用戶,只讀權限,容許訪問的數據庫是default。來源ip是不限制。這個是配置在/etc/metrika.xml中的。這個配置只是引用而已。xml
<networks>
<ip>::/0</ip>
</networks>
下面用dba用戶登陸試試:htm
clickhouse-client -u dba -h 192.168.0.10 --password mc1lF9cI
[root@db_server_yayun_02 ~]# clickhouse-client -u dba -h 192.168.0.10 --password mc1lF9cI ClickHouse client version 1.1.54198. Connecting to 192.168.0.10:9000 as user dba. Connected to ClickHouse server version 1.1.54198. :)
能夠看見已經登陸,數據庫中還有一個yayun數據庫,咱們看看可否訪問:blog
:) use yayun USE yayun Received exception from server: Code: 291. DB::Exception: Received from 192.168.0.10:9000. DB::Exception: Access denied to database yayun. 0 rows in set. Elapsed: 0.035 sec.
能夠看見提示沒有權限,上面也說到過,只有訪問default庫的權限。咱們再試試
:) use default USE default Ok. 0 rows in set. Elapsed: 0.002 sec. :) show tables; SHOW TABLES ┌─name───────────┐ │ ontime_all │ │ ontime_local │ │ ontime_replica │ └────────────────┘ → Progress: 3.00 rows, 189.00 B (399.91 rows/s., 25.19 KB/s.) 3 rows in set. Elapsed: 0.008 sec. :) select * from ontime_all limit 1; SELECT * FROM ontime_all LIMIT 1 ┌─FlightDate─┬─Year─┐ │ 2001-10-12 │ 2001 │ └────────────┴──────┘ ↘ Progress: 1.00 rows, 4.00 B (44.09 rows/s., 176.35 B/s.) 1 rows in set. Elapsed: 0.023 sec. :)
能夠看見沒有問題,那麼能建立庫表麼?試試
:) create database db01 CREATE DATABASE db01 Received exception from server: Code: 164. DB::Exception: Received from 192.168.0.10:9000. DB::Exception: Cannot execute query in readonly mode. 0 rows in set. Elapsed: 0.023 sec. :)
能夠看見只讀模式,權限比較簡單,更多的請參考官方文檔。或者仔細閱讀users.xml。
參考文檔: