Django执行manage.py dbshell报MySQL 1045错误,foo用户需补充什么权限?
问题排查与解决方案
你当前为foo'@'localhost配置的权限已经完全满足运行dbshell访问foodb的要求,报错ERROR 1045 (28000): Access denied属于身份验证失败,而非权限不足导致的,可按照以下步骤排查:
- 第一步:核对Django数据库配置
打开项目settings.py文件中的DATABASES配置段,确认PASSWORD字段值和你设置的qux完全一致,排查是否存在多写空格、大小写错误、特殊字符未转义的问题。 - 第二步:修复MySQL身份验证插件兼容性问题
部分高版本MySQL默认使用caching_sha2_password作为身份验证插件,旧版本的Django MySQL驱动无法兼容,可执行以下SQL修改用户验证插件并重置密码:ALTER USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'qux'; FLUSH PRIVILEGES; - 第三步:排查高优先级匹配用户冲突
MySQL会优先匹配更精确的用户规则,如果你本地存在''@'localhost'匿名用户、或者foo'@'127.0.0.1'用户,可能导致匹配规则异常。可执行以下操作修复:- 先测试本地直连是否正常:执行命令
mysql -u foo -p foodb,输入密码qux,如果可以正常登录则说明是Django配置问题,否则为MySQL侧配置问题 - 如直连失败,可删除匿名用户避免匹配冲突:
DROP USER IF EXISTS ''@'localhost'; FLUSH PRIVILEGES;- 如果你的Django配置中
HOST字段填的是127.0.0.1而非localhost,需要同步给foo'@'127.0.0.1'授权:
CREATE USER IF NOT EXISTS 'foo'@'127.0.0.1' IDENTIFIED BY 'qux'; GRANT ALL ON foodb.* to 'foo'@'127.0.0.1'; FLUSH PRIVILEGES; - 先测试本地直连是否正常:执行命令
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

