Node.js mysql模块创建连接池报访问拒绝及1133授权错误
问题根因
- 你创建的数据库用户为
'johnDoe'@'localhost',该用户仅允许通过环回地址(127.0.0.1)本地访问时匹配权限。但你的连接配置中host字段填写的是192.168.5.11,属于走局域网网卡的TCP连接,MySQL会将该连接的来源识别为服务器配置的主机名myHostname,和已创建的localhost用户规则不匹配,因此触发访问拒绝错误。 - 执行通配符授权报1133错误的原因是:MySQL 5.7及以上版本默认关闭了GRANT语句自动创建用户的功能,你没有提前创建
'johnDoe'@'%'这个用户,直接执行授权语句找不到对应的用户行,就会抛出该错误。
解决方法
二选一即可,优先推荐方案1,配置改动最小且安全风险更低。
方案1:修改连接配置适配现有用户
将连接配置中的host参数从192.168.5.11改为127.0.0.1即可,注意不要填localhost,Node.js的mysql驱动识别到localhost时会优先尝试Unix socket连接,容易出现额外的连接异常。
修改后的配置参考:
var dbConnOptions = { host: '127.0.0.1', port: 3306, user: 'johnDoe', connectionLimit: 10, charset: "utf8mb4", database: 'myDatabase', password: 'myPassword', multipleStatements: true };
修改后重启服务即可正常连接。
方案2:创建匹配访问来源的数据库用户
如果你必须使用192.168.5.11作为连接地址,按以下步骤操作:
- 登录MySQL命令行,先创建匹配主机名来源的用户:
CREATE USER 'johnDoe'@'myHostname' IDENTIFIED BY 'myPassword';
- 给该用户授予对应库的权限:
GRANT ALL PRIVILEGES ON myDatabase.* TO 'johnDoe'@'myHostname';
- 执行权限刷新命令让规则立即生效:
FLUSH PRIVILEGES;
如果你确实需要允许任意IP访问该数据库用户,先执行
CREATE USER 'johnDoe'@'%' IDENTIFIED BY 'myPassword';创建通配符用户,再执行对应授权语句即可,禁止跳过创建用户的步骤直接授权。不推荐生产环境使用%通配符配置用户来源,存在安全风险。
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

