Mysql
 sql >> Baza danych >  >> RDS >> Mysql

połącz się z bazą danych mysql za pomocą biblioteki phpseclib

Po pierwsze, czy nie byłoby lepiej zezwolić temu użytkownikowi na zdalny dostęp do mysql? Jednak nie znam twoich powodów.

Najpopularniejszym przejrzystym sposobem byłoby utworzenie tunelu ssh. Można to zrobić na dwa różne sposoby. Jeśli port mysql (3306) nie jest otwarty na maszynie mysql, będziesz potrzebować odwróconego tunelu ssh, który musi zostać otwarty przez zdalną maszynę. Zaloguj się do maszyny mysql i wydaj następujące polecenie:

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

Jeśli port mysql jest otwarty na zdalnej maszynie, tunel może zostać otwarty przez maszynę php:

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

Niezależnie od sposobu, w jaki tunele zostały utworzone, aplikacja PHP może teraz po prostu użyć PDO i połączyć się z portem localhost 12345.

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

Cały ruch zostanie zaszyfrowany przez tunel.

Jeśli chcesz tylko wydać kilka prostych poleceń, możesz użyć następującej alternatywy.

Najprostszy, ale niebezpieczny sposobem byłoby użycie następującego polecenia:

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

Jest to niebezpieczne, ponieważ inni użytkownicy w systemie mogli zobaczyć hasło.

Możesz obejść problem bezpieczeństwa za pomocą expect . expect to program, który może w bezpieczniejszy sposób przekazywać hasło do mysql. Upewnij się, że expect jest zainstalowany w systemie zdalnym. Oto przykład przy użyciu SHOW TABLES polecenie w bazie danych 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
');

Aby lepiej zrozumieć, co się dzieje, niedawno napisałem mój artykuł na blogu o tym.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Railsy:wyświetlanie obrazu z pola blob w bazie danych

  2. AND pole NOT IN(NULL) zwraca pusty zestaw

  3. MYSQL — pobieranie znaczników czasu między datami

  4. Jak ograniczyć próby logowania - PHP i MySQL i CodeIgniter

  5. Jak aliasować pole lub kolumnę w MySQL?