简介
ClickHouse是一个高性能的列式数据库管理系统,旨在处理大量数据的实时分析和查询。它的设计目标是提供快速、高效的查询性能,同时保证数据的安全性和可靠性。近期,DeepSeek的ClickHouse数据库因未经身份验证的访问漏洞,意外暴露了超过100万行的敏感数据。
安全策略
1. 用户权限管理
- 创建用户:
CREATE USER username IDENTIFIED WITH plaintext_password BY 'password'; //创建一个用户名为 username 的用户,并设置密码。
- 授予权限:
GRANT SELECT, INSERT ON database.* TO username; //为用户 username 授予对 database 数据库下所有表的 SELECT 和 INSERT 权限。
- 撤销权限:
REVOKE SELECT, INSERT ON database.* FROM username; //撤销用户 username 对 database 数据库下所有表的 SELECT 和 INSERT 权限。
- 删除用户:
DROP USER username;
2. 加密
- 启用 TLS/SSL: 在
clickhouse-server
配置文件config.xml
中启用 TLS(SSL)加密:
<tcp_port_secure>9440</tcp_port_secure>
<https_port>8443</https_port>
<secure_connection_timeout>60</secure_connection_timeout>
<listen_host>::</listen_host>
<ssl_certificate>/path/to/certificate.crt</ssl_certificate>
<ssl_private_key>/path/to/private.key</ssl_private_key>
<ssl_ca_certificate>/path/to/ca.crt</ssl_ca_certificate>
- 启用数据加密(加密磁盘数据): 数据加密通常通过操作系统或存储层级(如 LUKS 或 BitLocker)来实现。ClickHouse 本身不提供直接加密数据存储的功能,但可以配合系统级加密技术来加密数据目录。
3. 审计日志
- 开启查询日志: 在
config.xml
中配置查询日志:
<query_log>
<enabled>1</enabled>
<path>/var/log/clickhouse-server/query.log</path>
</query_log>
- 开启操作日志: 在
config.xml
中配置操作日志:
<operation_log>
<enabled>1</enabled>
<path>/var/log/clickhouse-server/operation.log</path>
</operation_log>
4. 限制查询行为 (防止恶意查询)
- 限制查询执行时间: 你可以限制查询的最大执行时间:
SET max_execution_time = 60; -- 限制查询执行时间不超过60秒
- 限制查询内存使用: 限制每个查询的最大内存使用:
SET max_memory_usage = 10000000000; -- 限制最大内存使用为 10GB
- 限制查询返回行数: 限制查询最多返回的行数:
SET max_result_rows = 10000; -- 限制每个查询最多返回 10000 行
5. 访问限制
- 限制 IP 地址访问: 在
config.xml
中配置允许访问的 IP 地址范围:
<listen_host>127.0.0.1</listen_host> -- 仅允许本地连接
- 配置用户访问限制: 如果只想允许特定 IP 地址的用户访问数据库,可以在用户配置时限制该用户的 IP 地址:
CREATE USER username IDENTIFIED WITH plaintext_password BY 'password' HOST '192.168.1.%';
6. 其他安全配置
- 关闭 HTTP 接口: 如果不需要 HTTP 接口,可以在
config.xml
中禁用:
<http_port>0</http_port>
或者完全禁用 HTTP 接口:
<http_secure_port>0</http_secure_port>
REVOKE ALL ON default.* FROM username;
7. 配置加密备份
ClickHouse 本身不直接提供加密备份的功能,可以使用外部工具(例如 GPG、OpenSSL等)加密备份文件。
//使用 GPG 加密
clickhouse-backup create
gpg --symmetric --cipher-algo AES256 backup.tar.gz