Доступ к MySQL запрещен для пользователя ‘admin’ @ ‘localhost’ (с использованием пароля: ДА)

#php #mysql #database #plesk

#php #mysql #База данных #plesk

Вопрос:

Да, я знаю, что это распространенный вопрос. Но я перепробовал все, и я не могу решить эту проблему.

Итак, я использую plesk 12.5, и я могу войти в mysql с терминала с помощью этого скрипта, который использует хэшированный пароль:

 MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysql -u admin
  

Я даже могу войти в систему, когда добавляю к нему -h localhost.
Но я не могу войти в систему, когда я вхожу в систему из php-скрипта.

 <?php
$mysqli = new mysqli("localhost/ip adress", "admin", "plesk encrypted password", "database");

if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
  

Что я пробовал:

  • Я попытался изменить пароль в mysql
  • Я попытался обновить mysql (он обновлен)
  • Я попытался предоставить привилегии
  • Я попытался получить доступ с новым пользователем SQL
  • Я пытался ввести все разные пароли, которые я видел, поэтому я не думаю, что это проблема с паролем (РЕДАКТИРОВАТЬ)

РЕДАКТИРОВАТЬ: Спасибо за сообщения, похоже, что следующее не имеет ничего общего с проблемой выше.

Но после всего этого есть одна вещь, которая меня действительно беспокоит: когда я набираю следующую команду в mysql:

 show grants;
  

Я получаю следующее:

 GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD 'NOT the plesk cleartext password'
  

Отображаемый пароль начинается со звездочки (*), за которой следует случайный текст и цифры.
Я пытался получить доступ с этим паролем, но он вообще не распознается.

Я думаю, что это странно, но я все еще не могу найти решение.

Комментарии:

1. Пароль, указанный в show grants , является зашифрованным паролем, а не фактическим паролем.

2. Спасибо, я понял это сейчас, но это все еще не решает проблему, из-за которой я не могу подключиться с php.

Ответ №1:

$ mysqli = новый mysqli («localhost / ip-адрес», «admin», «реальный пароль, который вы ввели, а не зашифрованный», «база данных»);

Комментарии:

1. Хорошая попытка, но нет. Я также должен использовать зашифрованный пароль при входе в систему с терминала.

Ответ №2:

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

С вашей командой предоставления нет проблем, это то, что она должна возвращать.

вот простой пример, а не сам процесс:

мой пароль 123456 зашифрованный формат abcdef

когда я ввожу зашифрованный формат (abcdef), mysql затем преобразует его в 123456

теперь, когда у него есть ваш текстовый пароль, он будет хэшировать его с помощью собственных методов mysql, таких как удаление символа или смещение строки в сторону или добавление к значению ASCII с использованием последовательности Фибоначчи, или любым другим методом, который выберет программист.

допустим, мой метод хеширования удаляет первый и последний символы, а затем добавляет 2 к значению ASCII оставшегося

line1: 123456 line2: 2345 line3: 4567

4567 — это мой хэшированный пароль, поэтому будут отображаться разрешения на показ:

 GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '4567'
  

а не 123456

Комментарии:

1. Спасибо за вашу информацию, это объясняет, что отображается предоставление пароля, но я все еще не могу войти в базу данных из php-скрипта ни с одним из 3 паролей (мой собственный пароль, зашифрованный пароль plesk и пароль mysql), поэтому я не думаю, что это проблема с паролем.

2. О, я думал, вы смогли войти в систему. Я всегда использую пароли открытого текста, кстати. Что я делаю, чтобы избежать получения этого пароля в репозитории github? отличный вопрос! Я использую переменные среды. Вместо жесткого кодирования пароля я использую что-то вроде $ _ENV [‘MYSQL_PASS’], и вы можете запустить свой скрипт с помощью export MYSQL_PASS = yourpass ; php yourscript.php

3. Я получил скрипт с паролем из папки www. Но да, я просто ввел пароль непосредственно в скрипт. Думаю, это не должно быть проблемой.