У меня проблемы с перебоями в подключении с моего 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 совместимым с более новым методом аутентификации (я еще не смотрел, но буду после того, как опубликую это), я был бы благодарен.