sql >> Database teknologi >  >> RDS >> Mysql

opret forbindelse til mysql-databasen ved hjælp af phpseclib-biblioteket

For det første, ville det ikke være bedre at tillade fjernadgang for denne bruger til mysql? Jeg kender dog ikke dine grunde.

Den mest almindelige og gennemsigtige måde ville være at skabe en ssh-tunnel. Dette kan gøres på to forskellige måder. Hvis mysql-porten (3306) ikke er åben på mysql-maskinen, skal du bruge en omvendt ssh-tunnel, som skal åbnes af den eksterne maskine. Log ind på mysql-maskinen og udfør følgende kommando:

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

Hvis mysql-porten er åben på fjernmaskinen, kan tunnelen åbnes af php-maskinen:

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

Uanset hvordan tunnelerne er blevet oprettet, kan PHP-applikationen nu bare bruge PDO og oprette forbindelse til localhost-port 12345.

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

Al trafik bliver krypteret gennem tunnelen.

Hvis du blot ønsker at udstede et par simple kommandoer, kan du bruge følgende alternativ.

Den enkleste, men usikre måde ville være at bruge følgende kommando:

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

Dette er usikkert, fordi andre brugere på systemet kunne se adgangskoden.

Du kan omgå sikkerhedsproblemet ved at bruge expect . expect er et program, som kan videregive adgangskoden til mysql på en mere sikker måde. Sørg for, at expect er installeret på fjernsystemet. Her kommer et eksempel med SHOW TABLES kommando på database 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
');

For yderligere at forstå, hvad der foregår, har jeg for nylig skrevet en min blogartikel om det.



  1. Henter rækker i en MySQL-databasetabel ved hjælp af MySQL C API og C++

  2. Skal jeg bruge MyISAM- eller InnoDB-tabeller til min MySQL-database?

  3. Fatal fejl:[] operator understøttes ikke for strenge

  4. Påvirker MySQL foreign_key_checks hele databasen?