ローカルコンピュータで数か月間、セットアップ全体が機能しています。
現在、リモートサイトにインストールしています。
新しいmysql DBを作成し、新しいユーザー(「someuser」)を作成して、次のように完全な権限を付与しました-
すべての特権を付与。 'somepassword'によって識別される 'someuser' @ 'localhost'にGRANT OPTIONを指定して;
「python manage.py syncdb」を使用してdbを同期し、正しいテーブルが作成されました。私のsettings.pyにはこれと同じユーザーがいます。
しかし、アプリケーションを介してユーザーをログインさせようとしたときにDBにヒットすると、ログに次のように表示されます-
(1045、 "ユーザー 'someuser' @ 'localhost'のアクセスは拒否されました(パスワードを使用:YES)")
私はmysql(Djangoと同じボックスにインストールされています)を介してログインし、権限を確認しました。正しく表示されます-
Someuser @ localhostの許可
すべての特権を有効にする*。 *パスワード '* thesaltedpasswordOverHere'で識別される 'someuser' @ 'localhost'にGRANT OPTIONを指定
Djangoのrootユーザー/パスワードは、正しい方法とは思えないため、使用したくありません。
何が悪いのかについてのポインタはありますか?
私はfoo_dbという名前のデータベースに対して次のようにします。
create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;
私の場合、settings.pyには以下が含まれています。
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'NAME': 'TRYDJANGO',
'USERNAME':'user_trydjango',
'PASSWORD':'passtry',
'PORT':'3306',
'Host': 'localhost',
}
}
「USERNAME」を「USER」に変更すると機能します。
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'NAME': 'TRYDJANGO',
'USER':'user_trydjango',
'PASSWORD':'passtry',
'PORT':'3306',
'Host': 'localhost',
}
}
私のエラーメッセージは、データベースにパスワードが指定されていないことを示していました。
Django.db.utils.OperationalError:(1045、 "ユーザー 'mylocalusername' @ 'localhost'のアクセスが拒否されました(パスワード:NOを使用)")
manage.py
はsettings.py
からデータベースアクセス認証情報を取得する必要があります。これは特定のデータベースユーザーです(もちろん、そのユーザーのパスワードも同様です)。ローカルユーザーにデータベースログイン権限を付与してエラーメッセージに対応するのは、セキュリティ上の誤りです。
私の場合、settings.py
に問題があり(Djangoパイプラインからwebpackへのビルドパイプラインを再構築していました)、settings.py
からパイプライン関連のパーツを削除する必要がありました。修正のためです。これは、settings.py
の問題に関するpythonエラーメッセージが表示されなかったのはなぜですか?このエラーメッセージはソースの問題の推移的な結果にすぎません。manage.py
を修正すると、通常どおりDATABASE設定から認証情報が取得され、すべてがスムーズに行われました。
私たちのケースでは、webpackの前にDjango-pipeline
(具体的にはpip
パッケージDjango-pipeline-browserify==0.4.1
およびDjango-pipeline==1.6.8
)を使用していたため、移行したら、これらの行を設定から削除する必要がありました。
NODE_MODULES_BIN = '/home/myuser/sourcerepositorydir/node_modules/.bin/'
PIPELINE['SASS_BINARY'] = '/var/lib/gems/2.3.0/gems/sass-3.5.3/bin/sass'
PIPELINE['BABEL_BINARY'] = '{}{}'.format(NODE_MODULES_BIN, 'babel')
PIPELINE['BROWSERIFY_BINARY'] = '{}{}'.format(NODE_MODULES_BIN, 'browserify')
PIPELINE_BROWSERIFY_BINARY = PIPELINE['BROWSERIFY_BINARY']
PIPELINE['BROWSERIFY_ENV'] = {'NODE_ENV': 'development'}
PIPELINE['BROWSERIFY_ARGUMENTS'] = PIPELINE['BROWSERIFY_ARGUMENTS'] + ' --debug'
それまでは、無意味なエラーメッセージが表示されていました。
@ mattblang:
この場合、実際に使用されるsettings.py
ファイルにもホストが設定されていると役立ちます。
私にとっては/etc/graphite/local_settings.py
ですが、DATABASES Stanzas
の値が間違っていました。ホストの場合:'Host': '127.0.0.1',
Syncdbコマンドの実行中にlocalhostを検索したため、'Host': 'localhost',
に変更しました
これは次のようになります。
DATABASES = {
'default': {
'NAME': 'graphite',
'ENGINE': 'Django.db.backends.mysql',
'USER': 'graphite',
'PASSWORD': 'thepasswordyouchoose',
'Host': 'localhost',
'PORT': '3306'
}
}
...そしてsyncdb
コマンドpython manage.py syncdb
が正常に実行されます。
@duffymoの回答を参照して最後のステートメントを変更すると、うまくいく場合があります。
create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to foo_user@localhost identified by 'foo_password' with grant option;
私はこの構成を使用し、それは動作します。
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/my.cnf',
},
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
次のエラーが発生しました:
ModuleNotFoundError:「MySQLdb」という名前のモジュールはありませんDjango.core.exceptions.ImproperlyConfigured:MySQLdbモジュールの読み込みエラー。 mysqlclientをインストールしましたか?
ソリューション#01:ユーザーにデータベースへのアクセス権限があり、データベースでDDLおよびDML操作を実行できるかどうかを確認します。
ソリューション#02:settings.pyファイルのデータベース構成を変更
From:
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'root'
}
}
To:
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'root',
'PASSWORD': 'root',
'Host': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}
And機能し始めました。
私がしたことはすべて次のようです:
そしてそれは働き始めます。
私が理解している限り、someuserはDBゲストユーザーであり、管理者ではありませんよね?
その場合は、MySQL DB管理者ユーザーから、次のようにMySQL環境テーブル 'mysql.user'へのアクセスをsomeuserに許可します。
GRANT SELECT ON mysql
.user
TO 'someuser' @ '%';
私にはそれが働いた、イヴァン
また、settings.pyでMySQl-python 64ビットの場合、ポート番号を「3307」に変更します。その後、WindowsとMySql 5.7 Djangoでのみ接続が行われます。
MySQl-python 32ビットの場合は「3306」
DATABASES = {
'default': {
'NAME': 'graphite',
'ENGINE': 'Django.db.backends.mysql',
'USER': 'graphite',
'PASSWORD': 'thepasswordyouchoose',
'Host': 'localhost',
'PORT': '3307'
}
}