如何在default用户权限不足时,配置ClickHouse的安全连接与密码?
解决ClickHouse默认用户权限不足并配置连接安全
一、修复default用户权限不足问题
当前default用户缺少用户管理权限,需通过修改ClickHouse配置文件提升权限:
- 进入ClickHouse用户配置目录,通常为
/etc/clickhouse-server/users.d/,若该目录不存在,直接编辑主配置文件/etc/clickhouse-server/config.xml的<users>节点。 - 在
users.d目录下创建或编辑配置文件(如default_admin.xml),写入以下内容:
<yandex> <users> <default> <!-- 开启用户管理权限,让default拥有创建/管理用户的全部权限 --> <access_management>1</access_management> </default> </users> </yandex>
- 保存配置后,重启ClickHouse服务:
sudo systemctl restart clickhouse-server
- 重新用
clickhouse-client连接,此时执行SHOW USERS;或创建用户的语句即可正常运行。
二、创建带密码的超级用户
权限生效后,执行以下SQL创建超级用户并授予全量权限:
-- 创建带SHA256加密密码的用户 CREATE USER IF NOT EXISTS someuser IDENTIFIED WITH sha256_password BY 'your_strong_password'; -- 授予该用户所有权限,并允许其给其他用户授权 GRANT ALL PRIVILEGES ON *.* TO someuser WITH GRANT OPTION;
三、强化连接安全的配置步骤
- 给default用户设置强密码
即使暂时保留default用户,也要避免无密码访问:
ALTER USER default IDENTIFIED WITH sha256_password BY 'your_default_strong_password';
- 限制用户访问IP
通过配置文件添加IP白名单,仅允许可信IP访问用户:
在users.d目录下创建user_network_restrictions.xml,内容如下:
<yandex> <users> <someuser> <networks> <ip>127.0.0.1</ip> <ip>192.168.1.0/24</ip> <!-- 替换为你的可信内网段 --> </networks> </someuser> <default> <networks> <ip>127.0.0.1</ip> <!-- 仅允许本地访问default用户 --> </networks> </default> </users> </yandex>
- 启用TLS加密连接
编辑/etc/clickhouse-server/config.xml,开启加密端口和SSL配置:
<!-- 启用加密TCP端口 --> <tcp_port_secure>9440</tcp_port_secure> <!-- 启用加密HTTP端口 --> <http_port_secure>8443</http_port_secure> <openSSL> <server> <certificateFile>/path/to/your/certificate.pem</certificateFile> <privateKeyFile>/path/to/your/private_key.pem</privateKeyFile> <verificationMode>none</verificationMode> <loadDefaultCAFile>true</loadDefaultCAFile> <cacheSessions>true</cacheSessions> <disableProtocols>sslv2,sslv3</disableProtocols> <preferServerCiphers>true</preferServerCiphers> </server> </openSSL>
保存后重启服务,连接时使用加密方式:
clickhouse-client --secure --user someuser --password your_strong_password
- 强制所有用户使用密码
在配置文件中添加require_password参数,禁止无密码登录:
<users> <default> <require_password>1</require_password> </default> <someuser> <require_password>1</require_password> </someuser> </users>
内容的提问来源于stack exchange,提问作者Lajos Arpad
相关产品推荐
相关产品推荐

