ClickHouse用户管理安全指南

发布时间 2023-04-10 11:42:11作者: abce

用户管理

用户信息存储在user.xml文件中。

通常建议多个用户,使用单独的XML文件进行管理。默认是位于目录/etc/clickhouse-server/users.d/下。

例如,创建如下两个用户:ClickHouse和abce​

<users>
    <clickhouse>
        <networks>
            <ip>127.0.0.1</ip>
            <ip>0.0.0.0/0</ip>
            <ip>::/0</ip>
        </networks>          
        <password_sha256_hex>716b36073a90c6fe1d445ac1af85f4777c5b7a155cea359961826a030513e448</password_sha256_hex>
        <profile>clickhouse_operator</profile>
        <quota>default</quota>
    </clickhouse>
    <abce>
        <networks>
            <ip>127.0.0.1</ip>
        </networks>
        <password_sha456_hex>73d1b1b1bc1dabfb97f216d897b7968e44b06457920f00f2dc6c1ed3be25ad4c</password_sha256_hex>
        <profile>default</profile>
    </abce>
</users>

其中:

ClickHouse:密码是clickhouse_password ,以sha256哈希的方式存储,默认的profile是clickhouse_operator,可以从任意地方访问clickhouse

abce:只能从localhost访问clickhouse

SQL命令方式设置

要使用access_management setting显式开启sql控制方式。比如为abce开始sql方式的访问控制:

<users>
    <abce>
       <access_management>1</access_management>
    </abce>
</users>

开启后,就可以通过sql命令的方式来设置用户里,比如:​

CREATE USER IF NOT EXISTS myabc
  IDENTIFIED WITH SHA256_PASSWORD BY 'verysecretpassword'
  HOST IP '192.168.22.47/24' SETTINGS readonly=1;

 

用户网络权限管理

可以设置用户可以访问clickhouse的地址。其中:

·IP: IP地址或掩码。其中0.0.0.0/0表示所有的IPv4地址;::/0表示所有的IPv6地址

·Host:DNS可以解析的主机名

·Host Regexp (Regular Expression): 正则表达式匹配的主机名

比如:​

ALTER USER abce HOST IP '192.168.0.0/16';
ALTER USER abce HOST REGEXP 'chistadata[1234].com';

通过xml文件进行网络设置

位于/etc/clickhouse-server/config.d下的xml文件中的<networks>元素中。比如:​

#只能从本地访问
<networks>
    <ip>127.0.0.1</ip>
</networks>

#只能从站点example.com或者chistadata[1234].com匹配的地址访问
<networks>
    <host>example.com</host>
    <host_regexp>chistadata[1234].com</host_regexp>
</networks>

 

用户密码管理

可以以SHA256或纯文本的方式存储密码。​

#生成sha256的密码
echo -n "password" | sha256sum | tr -d '-'

#或者
echo -n "PasswordForUserabce" | shasum -a 256 | tr -d '-'
c15bc95c03932a67f8c3d6b6370e44416b62fd690982c591754afb2f375cdc36

用xml管理密码​

<users>
    <John>
        <password_sha256_hex>5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8</password_sha256_hex>
    </John>
</users>

用sql命令设置密码

ALTER USER abce IDENTIFIED WITH sha256_hash BY '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8';

 

配额管理

配额是按时间间隔设置的,可以设置为不同的限制。例如,名为limited的配额有一个间隔,将最大查询设置为1000个,另一个间隔允许在24小时内总共进行10000个查询。​

<quotas>
    <limited>
        <interval>
            <duration>3600</duration>
            <queries>1000</queries>
        </interval>
        <interval>
            <duration>86400</duration>
            <queries>10000</queries>
    </limited>
</quotas>

 

用户Profiles管理

比如,为abce配置一个profile​

<profiles>
    <restricted>
        <!-- The maximum number of threads when running a single query. -->
        <max_threads>8</max_threads>
    </default>
</profiles>

<users>
    <abce>
        <networks>
            <ip>127.0.0.1</ip>
            <ip>0.0.0.0/0</ip>
            <ip>::/0</ip>
        </networks>
        <password_sha256_hex>c15bc95c03932a67f8c3d6b6370e44416b62fd690982c591754afb2f375cdc36</password_sha256_hex>
        <profile>restricted</profile>
    </abce>
</users>

 

修改用户的密码,并改为在任何地址都可访问。​

alter user abc@'192.168.%.%'rename to abc@'%'identified with sha256_password by 'abc';