2017-11-14 12 views
0

私はMySQLデータベースを使用してDjangoアプリケーションを使用しています。私はデータベースfooを作成し、新しいユーザーfoo_userを作成し、foo.*からfoo_userへのすべての特権を与え、フラッシュされた特権を与えました。私はこのスニペットを使ってPythonから接続することができDjango - MySQL:1045 'user' @ 'localhost'のアクセスが拒否されました

+-----------------------------------------------------------+ 
| Grants for [email protected]        | 
+-----------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'foo_user'@'localhost'    | 
| GRANT ALL PRIVILEGES ON `foo`.* TO 'foo_user'@'localhost' | 
+-----------------------------------------------------------+ 

私は私にこれを与えfoo_userSHOW GRANTS;として、コマンドラインからログインでき

import MySQLdb 

try: 
    db = MySQLdb.connect('localhost', 'foo_user', 'verysecurepassword', 'foo') 
    cursor = db.cursor() 
    cursor.execute('SHOW GRANTS;') 
    results = cursor.fetchall() 

    for r in results: 
     print(r) 
except MySQLdb.Error as e: 
    print(e) 

これがために特権を印刷しますfoo_userと予想されます。

settings.py

db_pass = '' 
db_pass_file = os.path.join(os.path.expanduser('~'), 'db.passwd') 
with open(db_pass_file, 'r') as dbpf: 
    db_pass = dbpf.read() 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'foo', 
     'USER': 'foo_user', 
     'PASSWORD': db_pass, 
     'HOST': 'localhost', 
     'PORT': '3306', 
    }, 
} 

しかし、私はmakemigrationsしようとすると、私は

django.db.utils.OperationalError: (1045, "Access denied for user 'foo_user'@'localhost' (using password: YES)") 

を取得し、私はSO、私が見つけることができる答えておきのアドバイスに従ってきました。私はデータベースとユーザーを落としてから、それらを数回再作成しました。明らかに間違っているものは何も見つかりません。エラー自体はあまり役に立ちません。私の質問は、MySQLやDjangoのより多くの情報を強制的に強制して何がうまくいかないかを知ることです。

ETA:パイソン3.5.2に、Django 1.11.7、14.14按分5.7.20版のMySQL、EC2インスタンス上で実行されている

答えて

0

問題がファイルから読み込まれているパスワードの末尾に余分な改行文字でした。

ソリューションは

db_pass = dbpf.read().rstrip()

db_pass = dbpf.read()

を変更しました

関連する問題