安全最佳实践
ClickHouse 云在设计时就考虑到了安全性。我们的目标是为您提供所需的工具,让您无需担心管理繁琐的基础设施任务,就能出色地完成工作。本指南旨在简化常见配置的设置,同时提供有关我们为支持您所做工作的相关信息。
我们希望您发现本指南有用,并期待与您分享这段旅程。
组织安全
本节与保护您的 ClickHouse 云 帐户相关。下面的 数据库用户 部分介绍了如何安全地管理数据库用户。
建立强密码
ClickHouse 云允许您设置用户名和密码,或使用您的 Google 帐户登录。对于那些设置用户名和密码的人来说,保护 ClickHouse 帐户的最佳方法是让所有用户设置强密码。网上有很多资源可以帮助您想出一个容易记住的密码。或者,您可以使用随机密码生成器,并将密码存储在密码管理器中,以提高安全性。
当前的最低密码设置符合 NIST 800-63B 身份验证器保证级别 1
- 至少 12 个字符
- 包含以下 4 项中的 3 项
- 1 个大写字母
- 1 个小写字母
- 1 个数字
- 1 个特殊字符
多因素身份验证
在登录时设置用户名和密码的用户也可以在登录控制面板后设置多因素身份验证。只需点击右上角的姓名首字母,选择“个人资料”,然后点击“多因素身份验证”部分中的“设置”。
使用 Google 身份验证的 SSO
如果您的公司使用 Google Workspace,您可以在 ClickHouse 云中利用您当前的单点登录设置。为此,只需使用您的公司电子邮件地址注册,并使用其他用户的公司电子邮件地址邀请他们。这样一来,您的用户必须使用您的公司的登录流程(无论是通过您的身份提供商还是直接通过 Google 身份验证)登录,然后才能验证到 ClickHouse 云。这包括根据您的登录流程的要求强制执行多因素身份验证。
基于组织角色的访问
组织级别的用户可以被授予管理员或开发人员权限。管理员可以管理计费,并创建、修改或终止服务。开发人员可以与现有服务进行交互。
其他组织安全功能
我们提供其他安全功能来保护您的帐户。如果登录尝试看起来可疑,我们会向您发送电子邮件,询问您该尝试是否有效,如果您告诉我们该尝试对您来说是未知的,我们会自动重置您的密码。我们还在应用程序中提供 组织活动 日志,以显示用户帐户、IP 地址列表(下面将详细介绍)或服务何时创建、修改或终止。
网络安全
限制数据库连接
我们提供设置 IP 访问列表 的功能,该列表将数据库连接限制为特定 IP 地址或范围。此功能是初始设置的一部分,也可以在以后通过点击您的服务,然后点击“安全”选项卡进行配置。您可以手动输入 IP 地址,上传包含 IP 地址或 CIDR 块信息的 JSON 文件,或从您之前设置的其他 ClickHouse 服务导入地址。您还可以为每个 IP 地址或块添加描述,以帮助进行管理。
如果您从家庭互联网连接连接到数据库,您的互联网服务提供商可能会定期更新您的 IP 地址,这可能会影响您的数据库连接。如果发生这种情况,只需登录您的帐户,转到服务的“安全”选项卡,然后使用“添加我的当前 IP”按钮更新列表。
数据库用户
您可以在数据库中设置其他用户帐户,使用角色使访问管理更轻松,并定期轻松地查看用户访问权限,以保持良好的安全性。请按照以下步骤将访问权限推广到您组织中的更多人员。
使用命名管理员帐户
设置一个命名的 管理员用户 并为他们分配 default_role
,然后将默认帐户的密码安全地存储在保险库中,以备不时之需。
组织角色
创建 角色,为您的数据库和表提供特定权限。
CREATE ROLE general_read_only;
GRANT SELECT on my_database.* to general_read_only;
建立安全的数据库密码
在 创建用户帐户 时使用 SHA256_hash 方法来保护密码。
提示:由于权限低于管理员的用户无法设置自己的密码,请让用户使用诸如 此生成器 之类的生成器对他们的密码进行哈希处理,然后再将其提供给管理员以设置帐户。密码应遵循上面列出的 要求。
CREATE USER userName IDENTIFIED WITH sha256_hash BY 'hash';
GRANT general_read_only TO userName;
定期查看访问权限
使用以下查询返回数据库的所有用户、角色和授权。
SELECT grants.user_name,
grants.role_name,
users.name AS role_member,
grants.access_type,
grants.database,
grants.table
FROM system.grants LEFT OUTER JOIN system.role_grants ON grants.role_name = role_grants.granted_role_name
LEFT OUTER JOIN system.users ON role_grants.user_name = users.name
数据保留
有时您需要设置自动策略来定期删除数据。ClickHouse 提供表级和列级 生存时间 (TTL) 设置,这些设置可以用作一般设置,也可以与条件结合使用,以从您的表中删除特定数据元素。您将需要一个日期/时间列来确定何时删除数据。
TTL 的示例如下
CREATE TABLE database.table
(
field1 String,
time_stamp DateTime,
field2 String
)
ENGINE = MergeTree()
ORDER BY time_stamp
TTL time_stamp + INTERVAL 1 HOUR;
数据删除
某些数据用例需要能够按需删除单个记录。ClickHouse 利用独特的存储结构来实现快速查询。我们建议对要进行单个删除的数据进行批量处理,以最大程度地减少处理操作。使用以下命令删除数据
ALTER TABLE database.table DELETE WHERE field1 = 'criteria';
我们还提供 轻量级删除,其中数据会立即从可见性中删除,并最终删除。