web-dev-qa-db-ja.com

SQLSTATE [HY000] [1045] CakePhpを使用したユーザー 'username' @ 'localhost'のアクセスが拒否されました

私はPHPとCakePHPが初めてです。 CakePhpを使用してデータベースを配線中に問題を見つけます。

以下は私のアプリの設定です。 Bitnami WAMPスタック5.4.40-0を使用していますCakePhp 3.0.4を使用してWeb MVCアプリケーションを作成しています

My 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()

問題が解決しました(更新)

私はアンキットとスペンサーの指示に従いました。

いくつか問題がありました。

  1. ユーザーのホストはlocalhostではなく、ワイルドカード%でした。それを変更すると、mysqlは接続を拒否し始めました。

  2. ファイアウォールを無効にすると、ポートが3306と異なることがわかりました。そのため、app.phpのエントリを変更しました。これで私のアプリケーションが焼けました:)

16
saurav

通常、このエラーメッセージは、使用しているパスワードが、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' 
25
spencer7593

次のものを確認する

  • MySQLサーバーが実行されていることを確認する
  • デフォルトの資格情報、つまりユーザー名: 'root'およびパスワード: '' [空のパスワード]で接続を確認します
  • 同じ資格情報でphpmyadminにログインしてみてください
  • Localhostの代わりに127.0.0.1を配置するか、LAN IPを使用してください。
  • 3306でMySqlを実行していることを確認し、構成している場合は、接続中にそれを必ず記述してください
6
Ankit Pise

私はその解決を見ましたが、私はまだ私のために働いた解決策を共有したいと思います。

.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

ありがとうスペンサー759

コンソール:

php artisan cache:clear
php artisan config:cache

今私のために動作します。 ララキャストの回答

MAMPを使用する場合は、unix_socket:/Applications/MAMP/tmp/mysql/mysql.sockのソケットを設定する必要があります。

上記の回答に、ここで提案した解決策はどれも役に立たなかったことを付け加えたいと思います。私のWAMPは、デフォルトでインストールされている3306ではなく、ポート3308で動作しています。ローカル環境で作業する場合、コンピューターでmysqladminを使用している場合(テスト環境用)、3306以外のポートで作業している場合は、値localhost:NumberOfThePortで変数DB_SERVERを定義する必要があることがわかりました。 define( "DB_SERVER"、 "localhost:3308")のようになります。この値を取得するには、タスクバー(非表示のアイコンセクション)のWAMPアイコンを右クリックして、[ツール]を選択します。 「MySQLで使用されるポート:NumberOfThePort」セクションが表示されます。

これにより、データベースへの接続が修正されます。

これは私が得たエラーです:エラー:SQLSTATE [HY1045]行 'X'でユーザー 'username' @ 'localhost'のアクセスが拒否されました。

これがお役に立てば幸いです。

:)

1
vialactea