mysqli报HY000/1045 root@localhost访问被拒绝,空密码运行是否安全?
问题解答
你遇到的报错信息:
Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
出现该错误的核心原因是代码中传入的数据库密码和本地MySQL root用户实际配置的密码不匹配,删除密码参数后可正常运行,说明你本地的root用户当前没有设置密码。
你的相关代码截图:
能否直接将数据库密码留空?
绝对不建议生产环境这么操作,哪怕是本地开发环境也最好避免,该操作存在非常严重的安全隐患:
- 公网暴露风险:如果你的运行环境可被公网访问,攻击者无需破解就能直接用root账号登录数据库,获得最高操作权限,可直接实施拖库、删表、篡改数据、植入恶意内容等操作,造成不可挽回的损失。
- 不良开发习惯:本地留空密码很容易在后续部署上线时忘记修改,生产环境裸奔几乎必然会遭到攻击。
- 权限外溢风险:哪怕是本地多用户环境,其他设备或本地其他程序也能无权限限制访问你的数据库,导致数据泄露。
正确处理方案
- 先登录本地MySQL,给root用户设置强密码,执行以下SQL命令:
ALTER USER 'root'@'localhost' IDENTIFIED BY '自定义强密码(建议包含大小写字母、数字、特殊符号,长度不低于8位)'; FLUSH PRIVILEGES;
- 将mysqli连接代码中的密码参数修改为刚设置的强密码,即可正常连接且不会再报1045错误。
额外优化建议
- 生产环境不要使用root账号连接业务数据库,单独创建业务专用数据库用户,仅分配对应业务库的必要操作权限,不要授予全局权限。
- 数据库密码不要硬编码在业务代码中,建议存入环境变量或独立的不受Web访问的配置文件中,避免配置泄露导致密码被盗。
内容的提问来源于stack exchange,提问作者Kayn Shieda
相关产品推荐
相关产品推荐

