关于 enforcing-password-policies
enforcing-password-policies 是用于配置 CockroachDB 集群密码要求的技能。它帮助数据库管理员设置密码最小长度和 bcrypt 哈希成本、验证策略生效情况,并管理对现有用户和应用的影响。
主要功能
- 01设置密码最小长度
- 02配置 bcrypt 哈希成本
- 03使用 SQL 验证策略执行
- 04管理现有用户的密码变更
- 05排查密码与身份验证错误
适用场景
- 01处理审计发现的弱密码问题
- 02为生产集群应用密码要求
- 03提高抵御暴力破解的能力
- 04规划用户和服务账号的密码变更
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cockroachlabs/ cockroachdb-skills --skill enforcing-password-policies安装后在 Claude Code 中输入/enforcing-password-policies确认已加载。
附带文件references/sql-queries.md
详细介绍
强制执行密码策略
通过设置最小密码长度和 bcrypt 哈希成本,为 CockroachDB 集群配置并强制执行密码策略。确保密码强度符合组织和合规性要求。
适用场景
- 加强密码要求,以符合合规标准(SOC 2、HIPAA、NIST 800-63B)
- 为新的生产集群设置密码策略
- 针对密码策略较弱的问题,响应安全审计发现
- 提高 bcrypt 哈希成本,增强抵御暴力破解攻击的能力
前提条件
- SQL 访问权限,并具有管理员角色(修改集群设置所必需)
- 了解影响: 密码策略变更仅影响新密码,不影响现有密码
检查你的访问权限:
SELECT member FROM [SHOW GRANTS ON ROLE admin] WHERE member = current_user();
步骤
1. 检查当前密码策略设置
-- Minimum password length
SHOW CLUSTER SETTING server.user_login.min_password_length;
-- Password hash cost (bcrypt rounds)
SHOW CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt;
如需其他与密码相关的查询,请参阅 SQL queries reference。
2. 设置最小密码长度
-- Set minimum password length to 12 characters (recommended)
SET CLUSTER SETTING server.user_login.min_password_length = 12;
各合规框架建议的最小长度:
| 框架 | 最小长度 | 建议 |
|---|---|---|
| NIST 800-63B | 8 个字符 | 建议使用 12 个或更多字符 |
| SOC 2 | 8 个字符 | 建议使用 12 个或更多字符 |
| HIPAA | 8 个字符 | 建议使用 12 个或更多字符 |
| PCI DSS | 7 个字符 | 建议使用 12 个或更多字符 |
| 内部最佳实践 | — | 管理员账户建议使用 14 个或更多字符 |
3. 配置哈希成本
bcrypt 哈希成本决定了密码哈希的计算开销。值越高,暴力破解攻击所需的时间越长,但身份验证时的 CPU 开销也会增加。
-- Set bcrypt hash cost (default: 10, recommended: 12)
SET CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt = 12;
哈希成本指南:
| 成本 | 每次哈希耗时(约) | 建议 |
|---|---|---|
| 10 | ~100ms | 默认值,对大多数情况都适用 |
| 12 | ~400ms | 推荐用于生产环境 |
| 14 | ~1.5s | 安全性高,但登录速度较慢 |
权衡: 成本越高,密码验证速度越慢,进而影响登录延迟。成本 12 是一个不错的平衡点。
4. 验证策略是否生效
-- Confirm settings
SHOW CLUSTER SETTING server.user_login.min_password_length;
SHOW CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt;
测试策略是否生效:
-- This should fail if min_password_length is 12
CREATE USER test_weak_password WITH PASSWORD 'short';
-- Expected: ERROR: password too short
-- This should succeed
CREATE USER test_strong_password WITH PASSWORD 'a-secure-password-123';
DROP USER test_strong_password;
5. 处理使用弱密码的现有用户
密码策略变更仅适用于新密码。现有用户会继续使用旧密码,直到他们更改密码。
强制轮换密码的选项:
- 告知用户策略变更,并要求他们更新密码
- 使现有密码过期,要求用户下次登录时更改密码(如果应用层支持)
- 以管理员身份重置密码,用于关键账户:
-- Reset a user's password (forces them to use a new, policy-compliant password)
ALTER USER <username> WITH PASSWORD '<new-strong-password>';
6. 管理密码更改和轮换
用户自助更改密码
SQL 用户可以更改自己的密码:
-- User changes their own password (CURRENT_USER, no parens)
ALTER USER CURRENT_USER WITH PASSWORD '<new-password>';
注意: 默认情况下,非管理员用户可以更改自己的密码。如果用户报告无法更改密码,请确认他们使用正确的用户身份连接,并且没有 HBA 规则阻止基于密码的身份验证。
管理员重置密码
-- Admin resets another user's password
ALTER USER <username> WITH PASSWORD '<new-strong-password>';
-- Verify the user exists before resetting
SELECT username FROM [SHOW USERS] WHERE username = '<username>';
Cloud Console 密码与 SQL 密码
CockroachDB Cloud 有两种独立的密码体系:
- Cloud Console 密码 — 通过 Cloud Console UI 或 SSO 管理。可通过 Cloud Console 登录页面上的“Forgot password”流程重置。
- SQL 用户密码 — 通过 SQL
ALTER USER管理,与 Cloud Console 密码相互独立。
更改其中一种密码不会影响另一种。如果用户使用这两种访问方式,则必须分别管理两种密码。
密码轮换最佳实践
- 按固定计划定期轮换服务账户密码(例如,每 90 天)
- 服务账户使用基于证书的身份验证,从而完全避免密码轮换
- 协调密码轮换与应用部署周期,避免停机
- 更改密码后,在停用旧密码之前,先验证应用能否使用新凭据连接
7. 排查常见密码错误
“密码太短”
密码不符合 min_password_length 设置。
-- Check the current minimum
SHOW CLUSTER SETTING server.user_login.min_password_length;
修复方法:使用符合或超过最小长度要求的更长密码。
“bcrypt 密码哈希过长”
密码超过 bcrypt 的 72 字节输入限制。这可能由密码过长或包含多字节 Unicode 字符导致。
-- Workaround: use a shorter password (under 72 bytes)
ALTER USER <username> WITH PASSWORD '<shorter-password>';
这是 bcrypt 的限制,并非 CockroachDB 特有的问题。
更改密码后出现身份验证失败
如果用户报告更改密码后立即出现身份验证失败:
- 确认密码设置正确(没有复制粘贴带入的空白字符)
- 检查连接池是否缓存了旧凭据——重启连接池
- 确认 HBA 配置允许使用密码进行身份验证:
SHOW CLUSTER SETTING server.host_based_authentication.configuration;
安全注意事项
- 仅影响新密码: 更改
min_password_length不会使现有密码失效。使用短密码的用户仍可登录,直到他们更改密码。 - 哈希成本延迟: 提高
crdb_bcrypt成本会增加登录时间。将成本设置为高于 12 之前,请使用真实的连接池进行测试。 - 服务账户: 确保服务账户使用强密码或基于证书的身份验证(证书不受密码策略限制)。
回滚
-- Reset minimum password length to default (1 = no minimum)
SET CLUSTER SETTING server.user_login.min_password_length = 1;
-- Reset hash cost to default
RESET CLUSTER SETTING server.user_login.password_hashes.default_cost.crdb_bcrypt;
参考资料
技能参考:
相关技能:
- auditing-cloud-cluster-security — 执行全面的安全状况审计
- configuring-sso-and-scim — 使用 SSO 消除基于密码的身份验证
- managing-tls-certificates — 使用基于证书的身份验证代替密码
CockroachDB 官方文档: