Mysql
 sql >> база данни >  >> RDS >> Mysql

свържете се с базата данни mysql с помощта на библиотека phpseclib

Първо, не би ли било по-добре да разрешите отдалечен достъп на този потребител до mysql? Не знам обаче причините ви.

Най-често срещаният прозрачен начин би бил създаване на ssh тунел. Това може да стане по два различни начина. Ако mysql портът (3306) не е отворен на mysql машината, ще ви е необходим обратен ssh тунел, който трябва да бъде отворен от отдалечената машина. Влезте в mysql машината и издайте следната команда:

ssh -R 12345:localhost:3306 [email protected]_machine -N

Ако портът mysql е отворен на отдалечената машина, тунелът може да бъде отворен от php машината:

ssh -f [email protected]_machine -L 12345:mysql_machine:3306 -N

Независимо от начина, по който са създадени тунелите, приложението PHP вече може просто да използва PDO и да се свързва с порт 12345 на локалния хост.

$pdo = new PDO('mysql:host=localhost;port=12345;dbname=test', $user, $password);

Целият трафик ще бъде криптиран през тунела.

Ако просто искате да издадете няколко прости команди, можете да използвате следната алтернатива.

Най-простият, нонесигурен начин би бил да използвате следната команда:

echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');

Това е несигурно, защото други потребители в системата могат да видят паролата.

Можете да заобиколите проблема със сигурността, като използвате expect . expect е програма, която може да предаде паролата на mysql по по-сигурен начин. Уверете се, че expect е инсталиран на отдалечената система. Ето един пример с помощта на SHOW TABLES команда на база данни test :

include('Net/SSH2.php');

$ssh = new Net_SSH2('192.xxx.xxx.xxx');
if (!$ssh->login('ssh_user', 'ssh_password')) {
exit('Login Failed');
}

echo $ssh->exec('expect <<EOF
# disable command output
log_user 0
# start the mysqldump process
spawn mysql -uTHE_USER -p test -e "SHOW TABLES"
# wait for the password prompt
expect "password:"
# send the password (mind the \r)
send "THE_PASSWORD\r"
# enable output again
log_user 1
# echo all outout until the end
expect eof
EOF
');

За да разбера допълнително какво става, наскоро написах моя статия в блога за това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да синхронизирам Visual Foxpro dbfs с MySQL?

  2. MySQL няма да позволи на потребителя да влезе:Грешка 1524

  3. SQL Server предлага ли нещо като MySQL ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ

  4. MySQL пропуска първите 10 резултата

  5. PHP Най-добрият начин за кеширане на MySQL резултати?