it-swarm.com.de

SQLSTATE [HY000] [1045] Zugriff für Benutzer 'Benutzername' @ 'localhost' mit CakePhp abgelehnt

Ich bin neu in PHP und CakePHP. Probleme beim Verkabeln meiner Datenbank mit CakePhp finden.

Im Folgenden finden Sie meine App-Konfiguration ... Ich bin auf Bitnami WAMP-Stapel 5.4.40-0. Ich verwende CakePhp 3.0.4, um eine Web-MVC-Anwendung zu erstellen

Eintrag für Datenquellen in Meine app.php-Datei

/**
 * 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'],
    ],

Ich habe bereits eine Datenbanktabelle mit dem Namen Jobs gemäß den CakePhp-Konventionen erstellt. Der Benutzer test2 hat dieselben globalen Berechtigungen wie der root-Administrator.

Aber wenn ich den Befehl zum Backen ausführen lasse. Ich erhalte folgende Fehlermeldung

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

PROBLEM BEHEBT (UPDATE)

Ich folgte den Anweisungen von Ankit und Spencer.

Ich hatte ein paar Probleme.

  1. Der Host meines Benutzers war nicht localhost, es war ein Platzhalter%. Nachdem sich das geändert hatte, begann mysql, Verbindungen abzulehnen.

  2. Ich habe meine Firewall deaktiviert und festgestellt, dass sich der Port von 3306 unterscheidet. Daher wurde der Eintrag in app.php geändert. Jetzt ist meine Anwendung gebacken :)

16
saurav

Diese Fehlermeldung bedeutet normalerweise, dass entweder das von Ihnen verwendete Kennwort nicht mit dem übereinstimmt, was MySQL für den Benutzer hält, mit dem Sie sich verbinden, oder ein übereinstimmender MySQL-Benutzer existiert nicht (wurde nicht erstellt).

In MySQL wird ein Benutzer sowohl durch einen Benutzernamen (test2) als auch durch einen Host (localhost) identifiziert.

Die Fehlermeldung, die Sie erhalten, identifiziert die Werte von user (test2) und Host (localhost) ...

  'test2'@'localhost'

Überprüfen Sie, ob dieser Benutzer existiert. Verwenden Sie diese Abfrage von einem Client aus, von dem aus Sie eine Verbindung herstellen können:

 SELECT user, Host FROM mysql.user

Sie suchen nach einer Zeile, die test2 für den Benutzer und localhost für den Host enthält.

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

Wenn diese Zeile nicht vorhanden ist, kann der Host auf den Platzhalterwert % gesetzt werden, damit er mit jedem anderen Host übereinstimmt, der nicht übereinstimmt.

Wenn die Zeile vorhanden ist, stimmt das Passwort möglicherweise nicht überein. Sie können das Kennwort ändern (wenn Sie als Benutzer mit ausreichenden Berechtigungen verbunden sind, z. B. root

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

Stellen Sie außerdem sicher, dass der Benutzer über Berechtigungen für Objekte in der Datenbank verfügt.

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

Überprüfen Sie die folgenden Dinge

  • Stellen Sie sicher, dass MySQL Server ausgeführt wird
  • Überprüfen Sie die Verbindung mit Standardanmeldeinformationen, d. H. Benutzername: 'root' und Kennwort: '' [Leeres Kennwort]
  • Versuchen Sie, sich mit denselben Anmeldeinformationen bei phpmyadmin anzumelden
  • Versuchen Sie 127.0.0.1 anstelle von localhost oder Ihrer LAN-IP zu verwenden.
  • Stellen Sie sicher, dass Sie MySql auf 3306 ausführen, und geben Sie bei der Konfiguration an, dass Sie es angeben, während Sie eine Verbindung herstellen
6
Ankit Pise

Wenn Sie MAMP verwenden, müssen Sie möglicherweise das Socket festlegen: Unix_socket: /Applications/MAMP/tmp/mysql/mysql.sock

Ich möchte zu den Antworten oben hinzufügen, dass keine der hier vorgeschlagenen Lösungen für mich funktioniert hat. Mein WAMP arbeitet an Port 3308 anstelle von 3306, was standardmäßig installiert ist .. __ Ich habe herausgefunden, dass bei der Arbeit in einer lokalen Umgebung, wenn Sie mysqladmin auf Ihrem Computer verwenden (für die Testumgebung), und wenn Wenn Sie mit einem anderen Port als 3306 arbeiten, müssen Sie Ihre Variable DB_SERVER mit dem Wert localhost: NumberOfThePort definieren, so dass es wie folgt aussieht: define ("DB_SERVER", "localhost: 3308"). Sie können diesen Wert erhalten, indem Sie mit der rechten Maustaste auf das WAMP-Symbol in der Taskleiste (im Bereich der ausgeblendeten Symbole) klicken und Tools auswählen. Sie sehen den Abschnitt: "Von MySQL verwendeter Port: NumberOfThePort"

Dadurch wird Ihre Verbindung zu Ihrer Datenbank behoben.

Dies war der Fehler, den ich erhielt: Fehler: SQLSTATE [HY1045] Zugriff für Benutzer 'Benutzername' @ 'Localhost' in Zeile X verweigert.

Ich hoffe das hilft dir weiter.

:)

1
vialactea

Ich habe gesehen, dass es gelöst ist, aber ich möchte trotzdem eine Lösung teilen, die für mich funktioniert hat.

.env-Datei:

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

danke spencer7593

konsole:

php artisan cache:clear
php artisan config:cache

jetzt funktioniert es für mich . Laracasts antwortet