sql >> データベース >  >> RDS >> Mysql

phpseclibライブラリを使用してmysqlデータベースに接続します

    まず、そのユーザーがmysqlにリモートアクセスできるようにする方がよいのではないでしょうか。しかし、あなたの理由はわかりません。

    最も一般的な透過的な方法は、sshトンネルを作成することです。これは、2つの異なる方法で実行できます。 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を使用してセキュリティの問題を回避できます 。 期待する より安全な方法でmysqlにパスワードを渡すことができるプログラムです。 expectedであることを確認してください リモートシステムにインストールされています。 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. MySQLの文字列から不要な先頭文字を削除する方法

    2. Oracleインスタンスのシャットダウンと起動

    3. MariaDBでのINSERT()関数のしくみ

    4. SQLServerで文字列の左または右から特定の数の文字を選択する方法