Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

terhubung ke database mysql menggunakan perpustakaan phpseclib

Pertama, bukankah lebih baik mengizinkan akses jarak jauh untuk pengguna itu ke mysql? Namun, saya tidak tahu alasan Anda.

Cara transparan yang paling umum adalah membuat terowongan ssh. Ini dapat dilakukan dengan dua cara berbeda. Jika port mysql (3306) tidak terbuka di mesin mysql, Anda memerlukan terowongan ssh terbalik yang harus dibuka oleh mesin jarak jauh. Masuk ke mesin mysql dan jalankan perintah berikut:

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

Jika port mysql terbuka pada mesin remote maka tunnel dapat dibuka oleh mesin php:

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

Terlepas dari cara terowongan dibuat, aplikasi PHP sekarang hanya dapat menggunakan PDO dan terhubung ke port localhost 12345.

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

Semua lalu lintas akan dienkripsi melalui terowongan.

Jika Anda hanya ingin mengeluarkan beberapa perintah sederhana, Anda dapat menggunakan alternatif berikut.

Yang paling sederhana tetapi tidak aman caranya adalah dengan menggunakan perintah berikut:

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

Ini tidak aman karena pengguna lain di sistem dapat melihat sandi.

Anda dapat mengatasi masalah keamanan menggunakan expect . expect adalah program yang dapat meneruskan kata sandi ke mysql dengan cara yang lebih aman. Pastikan bahwa expect diinstal pada sistem jarak jauh. Ini dia contoh menggunakan SHOW TABLES perintah pada 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
');

Untuk lebih memahami apa yang terjadi, saya baru-baru ini menulis artikel blog tentang itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara saya lolos % di Knex di mana seperti kueri?

  2. Bagaimana cara mendapatkan nama kolom dari tabel MySQL yang diberikan?

  3. Tidak dapat menambah atau memperbarui baris anak:batasan kunci asing gagal

  4. Bagaimana cara menanyakan soundex() di mysql

  5. hapus * dari tabel tidak berfungsi