#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. Но да, я просто ввел пароль непосредственно в скрипт. Думаю, это не должно быть проблемой.