MySQL - доступ запрещен, пока я не подключусь через Workbench или CLI - PullRequest
0 голосов
/ 28 сентября 2018

У меня проблемы с перебоями в подключении с моего PHP-сайта localhost к моей локальной базе данных MySQL.Это возвращает мне Access Denied for 'user'@'localhost' (using password: YES), что типично для неправильного пароля.Я проверил, чтобы убедиться, что это не было чем-то конкретным, и я мог получить его с root, поэтому я был в замешательстве.Я даже настроил учетную запись 127.0.0.1, localhost и % с тем же именем пользователя и паролем.Никто из них не работал, но root работал просто отлично.Это была моя самая большая путаница - «root» работал без проблем, но этот новый пользователь вообще не работал.

Я просмотрел очень много проблем (см. Ниже) и проблем, изложенных в SE идругие форумы, относящиеся к Error 1045, Access Denied и всем вариантам, и большинство сводится к опечатке, опечатке или чему-то в этом роде.Я скопировал и вставил каждую соответствующую строку вокруг всего моего кода, так что это не проблема.У меня нет анонимного пользователя, так что это не проблема.Нет проблем с DNS, это localhost, и я пробовал каждую итерацию этого.

Проблема заключается в том, что решает проблему для меня.Если я открываю соединение с БД с использованием новой учетной записи через MySQL Workbench или CLI, внезапно веб-страница будет работать без проблем, подключаясь через новую учетную запись без проблем.Но если я запускаю сценарий, который вообще меняет информацию о новой учетной записи, даже если я ничего не меняю, и перезагружаю страницу, он будет снова запрещать доступ, пока я снова не открою это соединение через MySQL Workbench или CLI.

Это работает в обязательном порядке, каждый раз.Я понятия не имею, что происходит - нужно ли войти в учетную запись через CLI или Workbench, прежде чем их можно будет использовать через PHP?Или есть что-то еще, чего мне здесь не хватает?

PHP Code

$servername='localhost';
$username='website';
$password='password';
$database='db_1';

$conn=new mysqli($servername, $username, $password, $database);
if($conn->connect_error) die("connection failed");

Создание учетных данных MySQL

create user website@'localhost' identified by 'password';
grant SELECT, INSERT, DELETE on db_1.* to 'website'@'localhost';

Несколько вопросов SO, которые не помогли:
MySQL - доступ запрещен для пользователя
доступ запрещен для пользователя @ 'localhost' к базе данных ''
"Ошибка подключения: доступ запрещен дляuser 'root' @ 'localhost' (используя пароль: YES) "из функции php

EDIT 1 : я запускаю стек WAMP на локальном компьютере.У меня открыт брандмауэр для порта 3306 (порт MySQL прослушивает).Я не использую CPanel (я думаю, это так и называется).И я только что проверил, и он не работает с root, пока я не продолжу и не воссоздаю новое соединение с БД через CLI или Workbench.

Ошибка, которую он возвращает, также включает это, но яЯ никогда не сталкивался с этим, так как никогда раньше не пытался установить OpenSSL: mysqli::__construct(): PHP was built without openssl extension, can't send password encrypted in [file].Но это исчезает, как только я устанавливаю соединение через интерфейс командной строки (без каких-либо необычных тегов или чего-либо еще, поэтому я не думаю, что я использую SSL) или через Workbench.

Редактировать 2: Кроличья нора углубилась, а затем остановилась, но я все еще не понимаю, как правильно настроить мою установку, чтобы избежать ее в будущем / исправить, чтобы она была более безопасной.Решение (которое я не могу представить как свое собственное, поэтому, если один из вас захочет объяснить, а затем заявить об этом, пойти на это - я приму это), состояло в том, чтобы вернуться на мой сервер MySQL и перенастроить Authentication Method не использовать Strong Password Encryption и вместо этого выбрать Legacy Authentication Method.Если кто-то может объяснить, как сделать мой PHP совместимым с более новым методом аутентификации (я еще не смотрел, но буду после того, как опубликую это), я был бы благодарен.

...