レンタルサーバーのDBにSSH接続

解決


りっぴー  2023-02-09 01:24:46  No: 150781  IP: [192.*.*.*]

配布アプリ(windows)でレンタルサーバーのDB(mariaDB)に接続して動作させたいのですが

下記の方法で接続は可能なのですが。
CData ODBC MariaDB Driver
https://www.cdata.com/jp/blog/xservermariadbssh

ただ、ODBC接続になるので配布アプリ等では難しいと考えております。
ODBC以外の方法でレンタルサーバーにSSH経由でDB接続を行っている方はおられますか?

編集 削除
take  2023-02-09 02:07:07  No: 150782  IP: [192.*.*.*]

公式のFireDACの説明を読むとサポート対象バージョン

MySQL Server Community、Enterprise、Embedded の各エディションのバージョン 3.21 以降。
MariaDB 5.5 以降

ってなっているので使えるみたいですがEnterprise版は持ってないのでわかりません

MySQL サーバーへの接続(FireDAC)
https://docwiki.embarcadero.com/RADStudio/Sydney/ja/MySQL_%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A%EF%BC%88FireDAC%EF%BC%89

Delphiで作られたアプリ「HeidiSQL」がODBC経由では無く直接MariaDBと接続しているのは
この辺を使っているのかもしれません

https://self-development.info/heidisql%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%80%90mysql%E3%83%BBmariadb-gui%E3%83%84%E3%83%BC%E3%83%AB%E3%80%91/

ODBCを経由しないのを作ろうとしても
MariaDBを構築したサーバーにあるDLLを取り出してクライアントPCに登録する手間が必要そうです。

編集 削除
mam  URL  2023-02-09 03:58:10  No: 150783  IP: [192.*.*.*]

よく意味もわからずの投稿ですいません。

sshポートフォワーディングでmysqlに接続したいと言うことであれば、opensshでトンネルすれば接続出来ます。
これをdelphiで行いたいのであれば、
https://mam-mam.net/delphi/ssh_tunnel.html
のようにssh-pascalを使うと可能です。

https://mam-mam.net/delphi/db_mysql.html
のようにMariadbのクライアントdllを使ってMysqlやMariaDBに接続するのですが、
localhostのポート3333(設定による)でsshトンネルを介してデータベースに接続できます。

opensshのポートフォワーディングについては、以下を参照
https://mam-mam.net/mytech/show.php?cd=373

外していたらすいません。

編集 削除
りっぴー  2023-02-09 07:02:00  No: 150786  IP: [192.*.*.*]

take 様
mam  様

返信ありがとうございます。
教えていただいた、sshポートフォワーディングで接続は行えそうなのですが、
使用しているレンタルサーバーがパスワード認証は不可のサーバーでした…
※UserAuthPassからUserAuthKeyに変更して接続できました
  //認証
  //flag:=sess.UserAuthPass(
  //  E_MUser.Text,
  //  E_MPass.Text
  //);
  flag:=sess.UserAuthKey(
    E_MUser.Text,
    'C:\Users\win10\ssh\XXXXXX.key',
    E_MPass.Text
  );

今回配布アプリで接続をと考えていたのですが、
鍵ファイルを公開するのはセキュリティ的に危険なのでこのやり方は今回はやめておきます。
相談する前にもっと調べておくべきでした、申し訳ございません。

編集 削除
mam  URL  2023-02-13 05:10:58  No: 150790  IP: [192.*.*.*]

りっぴー様
鍵ファイルの配布もそうですが、SSHのパスワードの配布もどうなんだろうと思っていました。
>相談する前にもっと調べておくべきでした
いえいえ、そんなことはないです。こんなこともDelphiだと出来るんだと認知されれば皆様のお役に立つと思いますし、開発時などでは使えます。

ちなみに、あまり関係が無いのですが(SSH繋がり)、SFTP(SSH File Transfer Protocol)クライアントを作ろうと思ったら
https://mam-mam.net/delphi/tgputty.html
のようにTGPuttyLibを使えば可能みたいです。
こちらはsshポートフォワーディングでトンネルは作れないみたいです。

(拙作のホームページの紹介ばかりですいません。)

編集 削除