本文目录导读:

针对数据库弱口令的整改,通常需要遵循发现 -> 整改 -> 验证 -> 固化的流程,以下是详细的整改方案和操作步骤:
第一阶段:全面发现与评估
在动手改密码之前,必须先搞清楚“弱口令”在哪里。
- 资产梳理:列出所有数据库实例(MySQL、Oracle、SQL Server、PostgreSQL、Redis、MongoDB等)的IP、端口、版本、用途和责任人。
- 漏洞扫描/基线核查:
- 使用专业工具(如Nessus、AWVS、绿盟漏扫等)扫描“弱口令”漏洞。
- 使用基线核查工具(如安全狗、青藤、自研脚本)检查是否符合密码复杂度策略。
- 自查方向:检查是否存在空口令、默认口令(如
root/root、admin/admin、sa/123456)、与用户名相同的口令、包含公司名称/电话号码的简单口令。
- 应用配置文件排查:检查应用服务器上的
config、properties、yml、xml等配置文件中是否硬编码了明文密码。
第二阶段:核心整改(最关键的步骤)
整改原则: 遵循“最小权限”、“最大复杂度”、“定期更换”和“非必要不暴露”。
密码复杂度整改(最直接的方法)
为所有数据库账户设置符合规定的强密码(建议12位以上,包含大小写字母、数字、特殊字符)。
-
MySQL示例:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'New_Strong_Pwd@2024!'; FLUSH PRIVILEGES;
-
SQL Server示例:
ALTER LOGIN sa WITH PASSWORD = 'New_Strong_Pwd@2024!';
-
Oracle示例:
ALTER USER system IDENTIFIED BY "New_Strong_Pwd@2024!";
强制密码策略(从源头上防止再设弱口令)
设置数据库账户密码过期时间和复杂度规则。
- MySQL (8.0+):
SET GLOBAL validate_password.policy = STRONG; -- 默认为MEDIUM SET GLOBAL validate_password.length = 12;
- SQL Server:
- 开启“强制密码策略”和“强制密码过期”。
ALTER LOGIN sa WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
- 开启“强制密码策略”和“强制密码过期”。
删除/锁定不必要的账户与默认账户
- 删除或锁定:长期不用的账户、默认测试账户(如
test、guest)。 - 禁用远程登录:为最高权限管理员账户(如
root、sa)设置仅允许本地登录,减少被远程爆破的风险。- MySQL:
UPDATE mysql.user SET Host='localhost' WHERE User='root'; - PostgreSQL: 修改
pg_hba.conf,将host all all 0.0.0.0/0改为host all all 127.0.0.1/32。
- MySQL:
应用端配置整改
- 硬编码替换:将应用配置文件中的明文密码替换为加密存储或使用密码管理工具(如Vault、K8s Secret、Jasypt)。
- 热更新:更新密码后,必须同步更新所有连接该数据库的应用连接串,建议先改应用配置,再改数据库密码(或利用滚动更新机制),避免业务中断。
第三阶段:加固与长效管理
只改密码是不够的,需要建立机制防止复发。
-
最小权限原则:
- 为不同应用创建专用账户,只赋予所需的最小权限(如只读、仅增删改)。
- 禁止所有应用都使用
root或sa最高权限账户连接数据库。
-
启用日志审计:
- 记录所有登录失败、创建用户、权限变更等操作日志。
- 监控高频次的登录失败尝试(爆破行为),触发告警或自动封禁IP。
-
使用堡垒机/跳板机:
禁止直连数据库,所有DBA操作通过堡垒机进行,确保口令不直接暴露在公网,且操作有录像回放。
-
定期轮转:
- 制定密码轮转周期(如90天),对于高敏感数据库(生产核心),建议60天或更短。
- 自动化:使用Ansible、Vault或自研脚本,实现自动化批量改密和分发。
第四阶段:验证与测试
- 验证改密成功:使用新密码尝试连接所有节点。
- 业务功能测试:在测试环境先行验证,确保应用在新密码下能正常读写数据。生产环境变更必须走变更评审和灰度发布流程。
- 漏扫复查:再次运行漏洞扫描,确认弱口令漏洞已修复且无新增弱口令。
总结清单(可直接用于执行)
| 整改项目 | 动作 | 优先级 |
|---|---|---|
| 清除默认/空口令 | 立即修改root/sa/system等默认账户密码 |
最高 |
| 密码复杂度 | 设置长度≥12,含大小写+数字+特殊字符 | 高 |
| 锁定/删除无用账户 | 删除test、guest及僵尸账户 |
高 |
| 限制远程登录 | 将管理员账户Host限制为localhost |
高 |
| 应用配置文件 | 去除明文密码,改用密文或密钥管理 | 高 |
| 最小权限 | 应用账户只给业务所需最小权限 | 中 |
| 开启审计 | 记录登录失败和权限变更日志 | 中 |
| 定期轮转 | 建立每季度自动改密机制 | 中 |
⚠️ 重要提醒:
- 对生产数据库改密前,务必备份,并在业务低峰期操作,做好回滚预案。
- 如果数据库有主从复制,改密后需同步更新复制用户的密码,否则会造成主从同步断开。
如果需要具体的脚本(如批量检查MySQL弱口令、自动化修改SQL Server密码等),可以告诉我你使用的主要数据库类型,我可以提供对应的代码示例。