SQLSTATE[HY000] [1045] 使用 CakePHP 的用户“用户名”@“本地主机”的访问被拒绝

2022-08-30 18:16:07

我是PHP和CakePHP的新手。我在使用CakePHP连接数据库时发现问题。

以下是我的应用程序配置。

我在Bitnami WAMP堆栈5.4.40-0上。我正在使用CakePHP 3.0.4创建一个Web MVC应用程序

我的文件中数据源的条目。app.php

/**
 * Connection information used by the ORM to connect
 * to your application's datastores.
 * Drivers include Mysql Postgres Sqlite Sqlserver
 * See vendor\cakephp\cakephp\src\Database\Driver for complete list
 */
'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        /**
         * CakePHP will use the default DB port based on the driver selected
         * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
         * the following line and set the port accordingly
         */
        //'port' => 'nonstandard_port_number',
        'username' => 'test2',
        'password' => 'computer',
        'database' => 'jobs',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,

        /**
         * Set identifier quoting to true if you are using reserved words or
         * special characters in your table or column names. Enabling this
         * setting will result in queries built using the Query Builder having
         * identifiers quoted when creating SQL. It should be noted that this
         * decreases performance because each query needs to be traversed and
         * manipulated before being executed.
         */
        'quoteIdentifiers' => false,

        /**
         * During development, if using MySQL < 5.6, uncommenting the
         * following line could boost the speed at which schema metadata is
         * fetched from the database. It can also be set directly with the
         * mysql configuration directive 'innodb_stats_on_metadata = 0'
         * which is the recommended value in production environments
         */
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
    ],

我已经根据CakePHP约定创建了一个名为jobs的数据库表。用户 test2 具有与根管理员相同的全局权限。

但是当我运行bake all命令时,我收到以下错误:

2015-07-01 06:24:56 Error: [PDOException] SQLSTATE[HY000] [1045] Access denied for user 'test2'@'localhost' (using password: YES)
Stack Trace:
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\PDODriverTrait.php(48): PDO->__construct('mysql:host=127....', 'test2', 'computer', Array)
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\Mysql.php(89): Cake\Database\Driver\Mysql->_connect('mysql:host=127....', Array)
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Schema\BaseSchema.php(46): Cake\Database\Driver\Mysql->connect()

问题已解决(更新)

我按照Ankit和Spencer的指示。

我遇到了一些问题。

  1. 我的用户的主机不是本地主机;这是一个通配符。改变了这一点,然后MySQL开始拒绝连接。%

  2. 我禁用了防火墙,发现端口与3306不同。所以我更改了 中的条目。现在我的应用程序已烘焙:)app.php


答案 1

该错误消息通常意味着我们正在使用的密码与MySQL认为密码应该与我们连接的用户的密码不匹配,或者匹配的MySQL用户不存在(尚未创建)。

在MySQL中,用户由用户名(“test2”)主机(“localhost”)标识。

错误消息标识用户 (“test2”) 和主机 (“localhost”) 值...

  'test2'@'localhost'

我们可以检查用户是否存在,从客户端使用此查询,我们可以从以下位置进行连接:

 SELECT user, host FROM mysql.user

我们正在寻找一行,其中“test2”表示用户,“localhost”表示主机

 user     host       
 -------  -----------
 test2     127.0.0.1  cleanup
 test2     ::1        
 test2     localhost  

如果该行不存在,则主机可能设置为 通配符值 ,以匹配任何其他不匹配的主机。%

如果该行存在,则密码可能不匹配。我们可以更改密码(如果我们以具有足够权限的用户身份连接,例如root

 SET PASSWORD FOR 'test2'@'localhost' = PASSWORD('mysecretcleartextpassword')

我们还可以验证用户是否对数据库中的对象具有权限。

 GRANT SELECT ON jobs.* TO 'test2'@'localhost' 

编辑

如果我们使用DML操作(INSERT,UPDATE,DELETE)对mysql权限表进行更改,则在MySQL重新读取表之前,这些更改不会生效。我们可以通过强制使用由特权用户执行的语句重新读取来使更改生效。FLUSH PRIVILEGES


答案 2

检查以下事项

  • 确保你正在运行MySQL服务器
  • 检查与默认凭据的连接,即用户名:“root”和密码:“”[空白密码]
  • 尝试使用相同的凭据登录 phpmyadmin
  • 尝试将127.0.0.1而不是本地主机,否则您的局域网IP也可以。
  • 确保您在3306上运行MySql,如果您已配置,请确保在建立连接时声明它

推荐