sql >> Databasteknik >  >> RDS >> Mysql

anslut till mysql-databasen med phpseclib-biblioteket

För det första, vore det inte bättre att tillåta fjärråtkomst för den användaren till mysql? Men jag vet inte dina skäl.

Det vanligaste och transparenta sättet skulle vara att skapa en ssh-tunnel. Detta kan göras på två olika sätt. Om mysql-porten (3306) inte är öppen på mysql-maskinen, behöver du en omvänd ssh-tunnel som måste öppnas av fjärrmaskinen. Logga in på mysql-maskinen och utfärda följande kommando:

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

Om mysql-porten är öppen på fjärrmaskinen kan tunneln öppnas av php-maskinen:

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

Oavsett hur tunnlarna har skapats kan PHP-applikationen nu bara använda PDO och ansluta till localhost port 12345.

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

All trafik kommer att krypteras genom tunneln.

Om du bara vill utfärda ett par enkla kommandon kan du använda följande alternativ.

Det enklaste men osäkra sätt skulle vara att använda följande kommando:

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

Detta är osäkert eftersom andra användare på systemet kan se lösenordet.

Du kan lösa säkerhetsproblemet med expect . expect är ett program som kan skicka lösenordet till mysql på ett säkrare sätt. Se till att expect är installerat på fjärrsystemet. Här kommer ett exempel som använder SHOW TABLES kommando i databasen 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
');

För att ytterligare förstå vad som händer har jag nyligen skrivit en min bloggartikel om det.



  1. Hur sparar jag MySQL-frågeutdata till excel- eller .txt-fil?

  2. Oracle 11g Express Edition för Windows 64bit?

  3. MySQLSyntaxErrorException nära ? när du försöker köra PreparedStatement

  4. MySQL Fyll i saknade datum mellan två datum för en given status