mcpField
E
enforcing-password-policies

enforcing-password-policies

github.com/cockroachlabs安全23117 次安装14 周前更新
代码仓库

关于 enforcing-password-policies

enforcing-password-policies 是用于配置 CockroachDB 集群密码要求的技能。它帮助数据库管理员设置密码最小长度和 bcrypt 哈希成本、验证策略生效情况,并管理对现有用户和应用的影响。

主要功能

  1. 01设置密码最小长度
  2. 02配置 bcrypt 哈希成本
  3. 03使用 SQL 验证策略执行
  4. 04管理现有用户的密码变更
  5. 05排查密码与身份验证错误

适用场景

  1. 01处理审计发现的弱密码问题
  2. 02为生产集群应用密码要求
  3. 03提高抵御暴力破解的能力
  4. 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-63B8 个字符建议使用 12 个或更多字符
SOC 28 个字符建议使用 12 个或更多字符
HIPAA8 个字符建议使用 12 个或更多字符
PCI DSS7 个字符建议使用 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. 处理使用弱密码的现有用户

密码策略变更仅适用于新密码。现有用户会继续使用旧密码,直到他们更改密码。

强制轮换密码的选项:

  1. 告知用户策略变更,并要求他们更新密码
  2. 使现有密码过期,要求用户下次登录时更改密码(如果应用层支持)
  3. 以管理员身份重置密码,用于关键账户:
-- 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 特有的问题。

更改密码后出现身份验证失败

如果用户报告更改密码后立即出现身份验证失败:

  1. 确认密码设置正确(没有复制粘贴带入的空白字符)
  2. 检查连接池是否缓存了旧凭据——重启连接池
  3. 确认 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;

参考资料

技能参考:

相关技能:

CockroachDB 官方文档:

评论

支持 Markdown