web-dev-qa-db-fra.com

SQLSTATE [HY000] [1045] Accès refusé pour l'utilisateur 'nom_utilisateur' @ 'localhost' à l'aide de CakePhp

Je suis nouveau dans PHP et CakePHP. Trouver des problèmes lors du câblage de ma base de données avec CakePhp.

Ci-dessous se trouve la configuration de mon application… .. Je suis sur la pile Bitnami WAMP 5.4.40-0

Entrée pour datasources dans mon fichier 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'],
    ],

J'ai déjà créé une table de base de données appelée jobs conformément aux conventions CakePhp. L'utilisateur test2 a les mêmes privilèges que l'administrateur racine.

Mais quand je lance la commande Bake All. Je reçois l'erreur suivante

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

PROBLÈME RÉSOLU (MISE À JOUR)

J'ai suivi les instructions d'Ankit et Spencer.

J'ai eu quelques problèmes.

  1. L'hôte de mon utilisateur n'était pas localhost, c'était un joker%. Changé cela, alors mysql a commencé à refuser les connexions.

  2. J'ai désactivé mon pare-feu et constaté que le port était différent de 3306. J'ai donc modifié l'entrée dans app.php. Maintenant, mon application est cuite :)

16
saurav

Ce message d'erreur signifie généralement que le mot de passe que vous utilisez ne correspond pas à ce que MySQL pense que le mot de passe doit être pour l'utilisateur auquel vous vous connectez, ou qu'un utilisateur MySQL correspondant n'existe pas (n'a pas été créé).

Dans MySQL, un utilisateur est identifié à la fois par un nom d'utilisateur (test2) et par un hôte (localhost).

Le message d'erreur que vous obtenez identifie les valeurs user (test2) et Host (localhost) ...

  'test2'@'localhost'

Vérifiez si cet utilisateur existe. En utilisant cette requête d'un client, vous pouvez vous connecter à partir de:

 SELECT user, Host FROM mysql.user

Vous recherchez une ligne ayant test2 pour utilisateur et localhost pour hôte.

 user     Host       
 -------  -----------
 test2     127.0.0.1  
 test2     ::1        
 test2     localhost  

Si cette ligne n'existe pas, il est possible que l'hôte soit défini sur la valeur générique %, afin de correspondre à tout autre hôte qui ne correspond pas.

Si la ligne existe, le mot de passe peut ne pas correspondre. Vous pouvez modifier le mot de passe (si vous êtes connecté en tant qu'utilisateur disposant de privilèges suffisants, par exemple root

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

Vérifiez également que l'utilisateur dispose de privilèges sur les objets de la base de données.

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

Vérifier les choses suivantes

  • Assurez-vous que le serveur MySQL fonctionne
  • Vérifiez la connexion avec les informations d'identification par défaut, c'est-à-dire nom d'utilisateur: 'root' et mot de passe: '' [Mot de passe vide]
  • Essayez de vous connecter à phpmyadmin avec les mêmes informations d'identification.
  • Essayez de mettre 127.0.0.1 à la place de localhost ou de votre adresse IP lan également.
  • Assurez-vous que vous utilisez MySQL sur 3306 et si vous avez configuré, assurez-vous de l'indiquer lors de la connexion.
6
Ankit Pise

Si vous utilisez MAMP, il vous faudra peut-être définir le socket:

2

Je souhaite ajouter aux réponses indiquées ci-dessus qu'aucune des solutions proposées ici ne fonctionnait pour moi. Mon WAMP travaille sur le port 3308 au lieu de 3306, qui est ce qu'il est installé par défaut . J'ai découvert que lorsque vous travaillez dans un environnement local, si vous utilisez mysqladmin sur votre ordinateur (pour l'environnement de test), et si vous travaillez avec un port autre que 3306, vous devez définir votre variable DB_SERVER avec la valeur localhost: NumberOfThePort, elle se présentera ainsi: define ("DB_SERVER", "localhost: 3308"). Vous pouvez obtenir cette valeur en cliquant avec le bouton droit de la souris sur l’icône WAMP dans la barre des tâches (dans la section des icônes masquées) et en sélectionnant Outils. Vous verrez la section: "Port utilisé par MySQL: NumberOfThePort"

Cela corrigera votre connexion à votre base de données.

C'est l'erreur que j'ai eu: Erreur: SQLSTATE [HY1045] Accès refusé pour l'utilisateur 'nom_utilisateur' @ 'localhost' sur la ligne X.

J'espère que cela vous aide.

:)

1
vialactea

J'ai vu sa solution mais je veux toujours partager la solution qui a fonctionné pour moi.

fichier .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 admin:

 SELECT user, Host FROM mysql.user

merci spencer7593

console:

php artisan cache:clear
php artisan config:cache

maintenant ses travaux pour moi . Laracasts répond