web-dev-qa-db-fra.com

Utiliser MySQL avec Django - Accès refusé à l'utilisateur '@' localhost

J'apprends donc Django (1, 3, 1, 'final', 0) avec cette ressource: http://www.djangobook.com/fr/2.0/chapter05/

J'ai installé 'mysql-server' et 'python-mysqldb' via Synaptic. J'ai changé le paramètre approprié dans settings.py.

Le livre mentionné ci-dessus nous dit de courir à partir du shell manage.py:

>>> from Django.db import connection
>>> cursor = connection.cursor()

Je reçois cette erreur après avoir exécuté ces commandes:

OperationalError: (1044, "Access denied for user ''@'localhost' to database 'mydb'")

  Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/Django/db/backends/__init__.py", line 250, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/usr/lib/python2.7/dist-packages/Django/db/backends/mysql/base.py", line 322, in _cursor
    self.connection = Database.connect(**kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (1044, "Access denied for user ''@'localhost' to database 'mydb'")

MySQL m'a demandé de définir un mot de passe root lorsque je l'ai installé pour la première fois. Cela serait-il utilisé ici? Ou s'agit-il d'autre chose? 

22
user1265125

Votre utilisateur n'a pas accès à la base de données. Utilisez les commandes ci-dessous pour configurer votre base de données.

DROP DATABASE IF EXISTS `mydb`;
CREATE DATABASE `mydb`
    DEFAULT CHARACTER SET utf8
    DEFAULT COLLATE utf8_general_ci;

USE 'mysql';
GRANT ALL PRIVILEGES ON mydb.* TO 'mydb_user'@'localhost' IDENTIFIED BY 'your_password'

WITH GRANT OPTION;
FLUSH PRIVILEGES;

En outre, vous devez avoir suffisamment de privilèges pour l'exécuter. Enregistrez-le en tant que script.sql,

$mysql -u root -p < script.sql

Ensuite, sur settings.py où vous devez vous assurer que vos paramètres de base de données sont configurés correctement

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.mysql',
        'NAME': 'mydb',                  
        'USER': 'mydb_user',             
        'PASSWORD': 'your_password',                  
        'Host': '',                     
        'PORT': '',                      
    }
}

et

python manage.py syncdb

et tu as fini.

28
matcheek

J'ai également rencontré ce problème en suivant le didacticiel Django sur les tests ( https://docs.djangoproject.com/en/dev/intro/tutorial05/ ). En essayant de tester l'application polls, j'ai reçu l'erreur suivante:

user@Host:~/Django/mysite$ python manage.py test polls

Creating test database for alias 'default'...
Got an error creating the test database: (1044, "Access denied for user 'admin'@'localhost' to database 'test_Django_mysite'")
Type 'yes' if you would like to try deleting the test database 'test_Django_mysite', or 'no' to cancel: 

Le problème est que Django crée une base de données temporaire appelée test_Django_mysite.
J'ai pu résoudre ce problème en accordant l'accès à 'admin' @ 'localhost' sur la base de données test_Django_mysite qu'il tentait de créer. 

mysql> GRANT ALL PRIVILEGES ON test_Django_mysite.* TO admin@localhost IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.04 sec)

Il est à noter que je n'ai accordé que les privilèges à test_Django_mysite. Je n'avais pas besoin de le créer.

4
jbiz

Mon problème était que je modifiais settings.py alors que la configuration aurait dû être effectuée dans local_settings.py

Maintenant, tout semble fonctionner.

1
Felipe Volpato

Si vous avez modifié le mot de passe de la base de données et mis à jour settings.py, vous devez également redémarrer le processus wsgi.py, par exemple en redémarrant Apache.

0
Benedikt Köppel

Le livre de Django est assez vieux maintenant. en particulier, les paramètres de base de données sont maintenant un dictionnaire, plutôt que le groupe de variables décrites dans le livre Django.

en regardant la dernière ligne de votre traceback, il semble que vous essayez de vous connecter sans nom d'utilisateur.

essayez de changer

DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''

à

DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': ''
        'USER': ''
        # etc
    }
}
0
second

Je vais juste laisser ma réponse ici car j'ai perdu quelques bonnes minutes (presque une heure) sur cette question.

Regardez votre copier-coller :) Malheureusement, mysql renvoie le succès tout en accordant des privilèges pour les utilisateurs non existants à la base de données non existante ... 

Les deux requêtes:

GRANT ALL PRIVILEGES ON python_user.* TO 'python_db'@'%' WITH GRANT OPTION;

et:

GRANT ALL PRIVILEGES ON python_db.* TO 'python_user'@'%' WITH GRANT OPTION

retournera le succès. Aldo, je n'ai pas un tel utilisateur appelé python_db et db nommé python_user. :) C'est triste. Mon erreur mais aussi MySql n'était pas assez utile avec la sortie. :)

0
Mr.TK

Vous devez vérifier les configurations de la base de données dans le fichier settings.py et indiquer également si votre utilisateur de base de données dispose des privilèges lui permettant d’accéder à la base de données et d’exécuter des opérations dessus. 

S'il vous plaît voir si les solutions mentionnées ici travaille pour vous.

0