mysql Доступ запрещен для пользователя root @ localhost (используется пароль: НЕТ), несмотря на то, что вы установили пароль и ввели его в uri соединения - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь настроить базу данных mysql с помощью pymysql и Flask-sqlalchemy в приложении фляги.

db = SQLAlchemy()
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost:3306/ftm'
db.init_app(app)

Однако, когда я запускаю свое приложение, я получаю:

OperationalError: (pymysql.err.OperationalError) (1045, u"Access denied for user 'root'@'localhost' (using password: NO)")

Я попытался сбросить пароль и убедился, что он работает: из командной строки я могу ввести mysql, написав:

mysql -u root -p

и затем введя свой пароль в командной строке.Кто-нибудь знает, почему mysql, кажется, думает, что я пытаюсь подключиться без пароля, хотя у меня есть (действительный) пароль в URI?

Обратите внимание, что это проблема, отличная от mysql_exceptions.OperationalError: (1045, «Доступ запрещен для пользователя 'root' @ 'localhost' (используя пароль: YES)") и другие потенциальные дубликаты, потому что эти сообщения об ошибках по крайней мере регистрируют, что попытка подключения имеет парольприсоединен.

Редактировать: В произвольном порядке я: попробовал другого пользователя , проверил состояние строки подключения непосредственно перед тем, как db.init_app создал другой экземпляр MySQL и попытался подключиться к нему, удалил pymysql из строки подключения и попытался отследить его с помощью pdb (бесполезно, потому что единственный вызов метода, которыйЯ признал, что мой был init_app ()).Я также исследовал Интернет и не обнаружил никаких упоминаний о том, что кто-то получал это сообщение об ошибке при попытке подключиться к базе данных с помощью пароля. Единственная оставшаяся возможность, о которой я могу думать, это то, что во времячто-то передается из app.config в mysql (когда я вызываю db.init_app), что-то меняет мою строку для удаления пароля. Есть идеи?Если ни у кого ничего нет, мне просто нужно использовать Postgre или что-то еще ...

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Я столкнулся с этой проблемой и решил ее, введя оболочку db и сказав mysql, чтобы использовать подключаемый модуль аутентификации mysql_native_password для аутентификации вашей базы данных.Это более старый плагин, и, вероятно, стоит поискать новый, который также совместим с драйвером Python для подключения MySQL, но это единственный способ заставить его работать.

ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password123'

В примере, предоставленном операцией, вы должны заменить root на user_name.

Подробнее о плагине: https://dev.mysql.com/doc/refman/8.0/en/native-pluggable-authentication.html

0 голосов
/ 21 мая 2018

ОК, здесь есть несколько потенциальных проблем.Например:

  1. Возможно, ваш синтаксис "соединения" не отправляет пароль (как вы думаете, это так)

  2. Возможно, ваша комбинация«user» (например, «root») и «host» (например, «localhost») не определены в mySQL точно так, как вы думаете.

  3. Возможно сочетание пользователяи хост не передается из app.config в mysql именно так, как вы думаете.

ПРЕДЛОЖЕНИЯ:

  1. Смотрите здесь:

  2. Рассмотрите возможность изменения" mysql + pymysql "и посмотрите, что произойдет.

  3. Подумайте об определении другого пользователя (в любом случае «root», вероятно, плохая идея) и посмотрите, что произойдет.

  4. Добавьте «printf's»(или эквивалент алхимии) и / или включите трассировку.

Этот учебник также может помочь:

...