本页不适用于 ClickHouse Cloud。本文档介绍的功能不适用于 ClickHouse Cloud 服务。
更多信息,请参阅 ClickHouse 的 Cloud Compatibility 指南。
使用
https、native、mysql 和 postgresql 接口时,支持 SSL 用户身份验证。为实现安全身份验证,ClickHouse 节点需要设置 <verificationMode>strict</verificationMode> (不过在测试场景下,relaxed 也可用) 。如果你将 AWS NLB 与 MySQL 接口一起使用,则需要联系 AWS 支持以启用以下未公开的选项:
我希望能够按如下方式配置我们的 NLB proxy protocol v2:proxy_protocol_v2.client_to_server.header_placement,Value=on_first_ack。
1. 创建 SSL 用户证书
此示例使用由自签名 CA 签发的自签名证书。对于生产环境,请创建 CSR 并提交给你的 PKI 团队或证书提供商,以获取正式证书。
- 生成证书签名请求 (CSR) 和密钥。基本格式如下:
在此示例中,对于此示例环境中使用的域名和用户,可使用以下命令:
CN 是任意的,可以使用任何字符串作为证书的标识符。在后续步骤中创建用户时会用到它。
- 生成并签署将用于身份验证的新用户证书。基本格式如下:
在此示例中,对于此示例环境中使用的域名和用户,可使用以下命令:
2. 创建 SQL 用户并授予权限
有关如何启用 SQL 用户并设置角色的详细信息,请参阅 定义 SQL 用户和角色 用户指南。
-
创建一个配置为使用证书进行身份验证的 SQL 用户:
-
为新的证书用户授予权限:
为便于演示,本练习中为该用户授予了完整的管理员权限。有关权限设置,请参阅 ClickHouse 的 RBAC 文档。
我们建议使用 SQL 来定义用户和角色。不过,如果你当前是在配置文件中定义用户和角色,用户配置将如下所示:
3. 测试
- 将用户证书、用户密钥和 CA 证书复制到远程节点。
-
在 ClickHouse 的客户端配置中配置 OpenSSL,并指定证书及其路径。
-
运行
clickhouse-client。
请注意,如果在配置中指定了证书,则传递给 clickhouse-client 的密码会被忽略。
4. 测试 HTTP
- 将用户证书、用户密钥和 CA 证书复制到远程节点。
-
使用
curl测试示例 SQL 命令。基本格式如下:例如:输出将类似如下:
请注意,这里未指定密码;证书将替代密码,ClickHouse 会使用证书对用户进行身份验证。
摘要
clickhouse-client,也适用于任何支持 https 接口且可设置 HTTP 请求头的客户端。生成的证书和私钥应妥善保管并严格限制访问,因为证书用于对用户进行身份验证和授权,以执行 ClickHouse 数据库上的操作。请像保护密码一样保护证书和私钥。