【问题标题】:ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)ER_ACCESS_DENIED_ERROR:用户“@'localhost”的访问被拒绝(使用密码:否)
【发布时间】:2018-02-22 08:28:46
【问题描述】:

我有这个问题,我已经研究过了,我也解决不了,我想它与数据库权限有关,但我无法解决它:

if (error) throw error;
       ^

Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)
at Handshake.Sequence._packetToError (/home/carlos/www/express-cc/node_modules/mysql/lib/protocol/sequences/Sequence.js:52:14)
at Handshake.ErrorPacket (/home/carlos/www/express-cc/node_modules/mysql/lib/protocol/sequences/Handshake.js:103:18)
at Protocol._parsePacket (/home/carlos/www/express-cc/node_modules/mysql/lib/protocol/Protocol.js:279:23)
at Parser.write (/home/carlos/www/express-cc/node_modules/mysql/lib/protocol/Parser.js:76:12)
at Protocol.write (/home/carlos/www/express-cc/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/home/carlos/www/express-cc/node_modules/mysql/lib/Connection.js:103:28)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:266:12)
at readableAddChunk (_stream_readable.js:253:11)
--------------------
at Protocol._enqueue (/home/carlos/www/express-cc/node_modules/mysql/lib/protocol/Protocol.js:145:48)
at Protocol.handshake (/home/carlos/www/express-cc/node_modules/mysql/lib/protocol/Protocol.js:52:23)
at Connection.connect (/home/carlos/www/express-
cc/node_modules/mysql/lib/Connection.js:130:18)
at Object.<anonymous> (/home/carlos/www/express-cc/db.js:10:12)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Module.require (module.js:517:17)

---- 编辑 -----

我的 env.default 文件:

NODE_ENV=DEVELOPMENT

DB_HOST=localhost
DB_USER=user
DB_PASSWORD=userpass
DB_NAME=teste

这是我的 db.js 文件:

 var mysql = require('mysql')
  var connection = mysql.createConnection({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database : process.env.DB_NAME,
  sockertPath: '/var/run/mysqld/mysqld.sock'
})

 connection.connect()

 connection.query('SELECT 1 + 1 AS solution',
 function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].
  solution)
});

 module.exports = connection;

【问题讨论】:

    标签: mysql node.js database localhost


    【解决方案1】:

    您没有提供数据库用户:

    Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)
    

    【讨论】:

    • @Techtique 您在错误消息中看到,它缺少用户名并且未提供密码,因此出于某种原因process.env.DB_USERprocess.env.DB_PASSWORD 不包含来自env.default 的凭据。所以它与db权限无关。
    • @michaJIS 那么,我该怎么办?
    【解决方案2】:

    您必须专门创建一个 MySQL 用户才能访问该应用程序。创建用户并设置密码(不要将密码留空)。不要忘记授予该用户访问应用程序数据库和表的权限。我希望我有所帮助。

    【讨论】:

      【解决方案3】:

      您可以执行以下操作: mysql -u 根目录 -p 输入密码:

      在此处创建用户并在此处创建数据库,然后在您的代码中使用这些详细信息。 即通过以 root 身份登录来创建用户。

      【讨论】:

        【解决方案4】:

        您必须使用允许的主机部分的 IP 而非“localhost”的名称添加新用户

        RENAME USER 'myuser'@'localhost' TO 'myuser'@'127.0.0.1';
        

        【讨论】:

          【解决方案5】:

          ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

          然后在执行该命令后立即通过执行以下命令刷新权限:

          flush privileges;

          【讨论】:

            【解决方案6】:

            我遇到了类似的问题,我的所有连接都正常工作,但是我收到错误“ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)' 我的电话是在 app.js 级别的中间件内部制作,因此 .env 值尚无法访问,对于这种情况(它可以帮助那些与我有同样问题的人)我不得不补充:

            require('dotenv').config();
            

            在这样的连接文件中:

            const mysql = require('mysql')
            require('dotenv').config();
            const connectionLog = mysql.createPool({
                connectionLimit : 10,
                host: process.env.DB_HOST_LOG,
                user: process.env.DB_USER,
                password: process.env.DB_PASSWORD,
                database: process.env.DB_DATABASE,
                port:process.env.DB_PORT
            })
            

            对我来说,这就是决议。

            【讨论】:

              【解决方案7】:

              使用% 代替localhost 解决了这个问题:

              CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
              GRANT ALL PRIVILEGES ON db.* TO 'user'@'%';
              

              而不是

              CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
              GRANT ALL PRIVILEGES ON db.* TO 'user'@'localhost';
              

              【讨论】:

                【解决方案8】:

                检查一次您是否已导入environment variables 文件 导入db.js 文件之前。

                ,例如。 -

                不正确:

                require("db.js");
                
                const dotenv = require('dotenv');  
                dotenv.config({ path: 'env.default' });
                

                正确:

                const dotenv = require('dotenv');  
                dotenv.config({ path: 'env.default' });
                
                require("db.js");
                

                所以,先导入 env 文件,再导入 db.js 文件。

                【讨论】:

                • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                【解决方案9】:

                当您将变量移动到 .env 文件时,有时您会遇到此错误。那样的话

                1. 使用 npm 或 yarn add dotenv 安装 dotenv
                2. 使用 require('dotenv').config(); 导入 .env;

                在此之后,您将能够读取您的“用户”环境变量

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2017-03-21
                  • 1970-01-01
                  • 2015-10-07
                  • 2016-12-27
                  • 2012-06-17
                  • 2019-12-19
                  • 2017-10-26
                  相关资源
                  最近更新 更多