![在端口 4567 上运行的 nodejs 应用程序出现 MySQL Access Denied 错误](https://linux22.com/image/671541/%E5%9C%A8%E7%AB%AF%E5%8F%A3%204567%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E7%9A%84%20nodejs%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%87%BA%E7%8E%B0%20MySQL%20Access%20Denied%20%E9%94%99%E8%AF%AF.png)
我可以从 centos 6.7 上的命令行连接到 mysql 数据库:
mysql -u root -h 127.0.0.1 --protocol=TCP -p;
还:
mysql -u root -h localhost --protocol=TCP -p;
但是,如果我通过导入器插件从运行在端口 4567 上的 NodeBB 进行连接,我会收到访问被拒绝错误:
From a node application for importing data to the database I see:
22/11 09:11 [28144] - error: Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
at Handshake.Sequence._packetToError (/var/www/nodebb/node_modules/nodebb-plugin-import-punbb2/node_modules/mysql/lib/protocol/sequences/Sequence.js:48:14)
at Handshake.ErrorPacket (/var/www/nodebb/node_modules/nodebb-plugin-import-punbb2/node_modules/mysql/lib/protocol/sequences/Handshake.js:101:18)
at Protocol._parsePacket (/var/www/nodebb/node_modules/nodebb-plugin-import-punbb2/node_modules/mysql/lib/protocol/Protocol.js:270:23)
at Parser.write (/var/www/nodebb/node_modules/nodebb-plugin-import-punbb2/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/var/www/nodebb/node_modules/nodebb-plugin-import-punbb2/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/var/www/nodebb/node_modules/nodebb-plugin-import-punbb2/node_modules/mysql/lib/Connection.js:82:28)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at TCP.onread (net.js:538:20)
我已尝试授予权限*.* to 'root'@'%'
(这是一个流浪者盒子)但错误仍然存在。
有人能指出这可能是什么原因造成的吗?我可以使用相同的凭据从同一框上的简单 nodejs 脚本连接到 MySQL,而不会出现错误。
SELinux 已禁用:
sudo cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
答案1
如果这是 CentOS 的默认安装,则应检查 SELinux 配置。SELinux 为您的系统提供了细粒度的访问保护系统。这由内核中的 SELinux 模块控制。
任何由 SELinux 控制的访问都将被审计守护进程记录(在 CentOS 的默认安装中)。日志位于/var/log/audit/audit.log
,应该包含一些特定于您的 MySQL 访问尝试的条目。
在 CentOS6 上,它默认设置为强制执行。这是在 中配置的/etc/sysconfig/selinux
。更改后需要重新启动。
您可以禁用 SELinux,但最合适的方法是向 SELinux 添加策略以允许特定应用程序访问 MySQL。您可以按照手册。