SQLSTATE [HY000] [1045]使用CakePhp拒绝用户'username'@'localhost'

时间:2015-07-01 06:36:47

标签: php mysql cakephp cakephp-3.0

我是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具有与root admin相同的全局权限。

但是当我运行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. 我的用户主机不是localhost,它是通配符%。改变了,然后mysql开始拒绝连接。

  2. 我禁用了防火墙,发现端口与3306不同。因此更改了app.php中的条目。现在我的申请被烘焙了:)

5 个答案:

答案 0 :(得分:23)

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

在MySQL中,用户由用户名(test2)和主持人(localhost)标识。

您收到的错误消息标识user(test2)和host(localhost)值......

  'test2'@'localhost'

使用来自您可以从以下位置连接的客户端的查询来检查该用户是否存在:

 SELECT user, host FROM mysql.user

您正在寻找一个用户test2和主持人localhost的行。

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

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

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

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

还要验证用户是否拥有数据库中对象的权限。

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

答案 1 :(得分:6)

检查以下事项

  • 确保您运行MySQL服务器
  • 使用默认凭据检查连接,即用户名:'root'&amp;密码:''[空白密码]
  • 尝试使用相同的凭据登录phpmyadmin
  • 尝试将127.0.0.1替换为localhost,或者您的LAN IP也会这样做。
  • 确保您在3306上运行MySql,如果已配置,请确保在建立连接时说明

答案 2 :(得分:2)

如果您使用MAMP,则可能必须设置套接字: unix_socket:/Applications/MAMP/tmp/mysql/mysql.sock

答案 3 :(得分:1)

我想补充上面发布的答案,这里提出的解决方案都不适用于我。我的WAMP正在使用端口3308而不是3306,这是默认情况下安装的。 我发现在本地环境中工作时,如果在计算机中使用mysqladmin(用于测试环境),并且如果使用3306以外的端口,则必须使用值localhost:NumberOfThePort定义变量DB_SERVER,它将如下所示: define(&#34; DB_SERVER&#34;,&#34; localhost:3308&#34;)。您可以通过右键单击任务栏中的WAMP图标(在隐藏图标部分)并选择工具来获取此值。您将看到以下部分:&#34; MySQL使用的端口:NumberOfThePort&#34;

这将修复您与数据库的连接。

这是我得到的错误: 错误:SQLSTATE [HY1045]拒绝访问用户&#39;用户名&#39; @&#39; localhost&#39;在第X行。

我希望这可以帮助你。

:)

答案 4 :(得分:1)

我看到了解决方案,但我仍然想分享对我有用的解决方案。

.env文件:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=[your database name]
DB_USERNAME=[your mysql username]
DB_PASSWORD=[your mysql password]

mysql管理员:

 SELECT user, host FROM mysql.user

thank you spencer7593

控制台:

php artisan cache:clear
php artisan config:cache

现在对我有用。 Laracasts answers