C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ubuntu サーバーへの接続について


(過去ログ 177 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■101835 / inTopicNo.1)  ubuntu サーバーへの接続について
  
□投稿者/ kitakitune (7回)-(2023/04/28(Fri) 15:40:06)

分類:[VB.NET/VB2005 以降] 

ubuntuにMySQLを入れてデータベースサーバーを作成しました。
vb.netで作成したフォームアプリより、サーバーに接続するのですが、
現在の接続状況は
vb.netアプリ側で
MySql.Data.MySqlClientをインポートしてコネクションを開いてSQLを発行しています。
これで、接続・SQL発行・データ更新・取得等問題なく実行できています。

ただ、コネクションを開く際のソースコードに
サーバー名・データベース名・ユーザー名・パスワードが
全て平文で記述しています。
セキュリティの観点からとても心配です。

サーバーの操作は'Tera Term' 'MySQL Workbench'を使用していますが、
こちらは公開鍵認証での接続をしており、
クライアント側での秘密キーの管理も適切に行っています。(つもり...です。)

'MySQL Workbench'の接続のように次のようにフォームアプリより
二段階に分けてデータベースに接続する事を実現することは可能でしょうか?
1、ubuntuユーザーとして公開鍵認証を用いてsshで接続する。
2、Mysqlユーザとしてデータベースに接続してSQLを投げる。

現在はMysqlのバインドアドレスはコメントアウトして、
ubuntuの3306ポートを開いて接続しています。

ubuntuのバージョンは ubuntu server 22.04.6
Mysqlのバージョンは mysql 8.0.32
フォームアプリはvisual studio 2017 でvb.netにて作成しました。

ヒントでも御呈示いただければありがたいです。
宜しくお願い致します。


引用返信 編集キー/
■101836 / inTopicNo.2)  Re[1]: ubuntu サーバーへの接続について
□投稿者/ kitakitune (8回)-(2023/04/28(Fri) 15:46:11)
No101835 (kitakitune さん) に返信
> ubuntuにMySQLを入れてデータベースサーバーを作成しました。
> vb.netで作成したフォームアプリより、サーバーに接続するのですが、
> 現在の接続状況は
> vb.netアプリ側で
> MySql.Data.MySqlClientをインポートしてコネクションを開いてSQLを発行しています。
> これで、接続・SQL発行・データ更新・取得等問題なく実行できています。
>
> ただ、コネクションを開く際のソースコードに
> サーバー名・データベース名・ユーザー名・パスワードが
> 全て平文で記述しています。
> セキュリティの観点からとても心配です。
>
> サーバーの操作は'Tera Term' 'MySQL Workbench'を使用していますが、
> こちらは公開鍵認証での接続をしており、
> クライアント側での秘密キーの管理も適切に行っています。(つもり...です。)
>
> 'MySQL Workbench'の接続のようにフォームアプリより
> 二段階に分けてデータベースに接続する事を実現することは可能でしょうか?
> 1、ubuntuユーザーとして公開鍵認証を用いてsshで接続する。
> 2、Mysqlユーザとしてデータベースに接続してSQLを投げる。
>
> 現在はMysqlのバインドアドレスはコメントアウトして、
> ubuntuの3306ポートを開いて接続しています。
>
> ubuntuのバージョンは ubuntu server 22.04.6
> Mysqlのバージョンは mysql 8.0.32
> フォームアプリはvisual studio 2017 でvb.netにて作成しました。
>
> ヒントでも御呈示いただければありがたいです。
> 宜しくお願い致します。
>
>
引用返信 編集キー/
■101837 / inTopicNo.3)  Re[2]: ubuntu サーバーへの接続について
□投稿者/ 伝説のカレー (97回)-(2023/04/28(Fri) 17:13:36)
No101836 (kitakitune さん) に返信

> ただ、コネクションを開く際のソースコードに
> サーバー名・データベース名・ユーザー名・パスワードが
> 全て平文で記述しています。

暗号化して設定ファイルから読み込むようにした方がいんじゃないですかね…


> 1、ubuntuユーザーとして公開鍵認証を用いてsshで接続する。
> 2、Mysqlユーザとしてデータベースに接続してSQLを投げる。

Tera TermでSSHポート転送を行って
プログラムからはTera Termのリッスンアドレスにアクセスする感じでできそうな気がします


引用返信 編集キー/
■101838 / inTopicNo.4)  Re[3]: ubuntu サーバーへの接続について
□投稿者/ 伝説のカレー (98回)-(2023/04/28(Fri) 17:20:38)
https://dev.mysql.com/blog-archive/ssh-tunneling-in-connector-net/

ドライバがSSHトンネリングをサポートしているという情報もあり
ワンチャンTera Termを使わなくてもいけるかもしれないです
引用返信 編集キー/
■101839 / inTopicNo.5)  Re[4]: ubuntu サーバーへの接続について
□投稿者/ YuO (1回)-(2023/04/28(Fri) 18:18:42)
No101838 (伝説のカレー さん) に返信
> https://dev.mysql.com/blog-archive/ssh-tunneling-in-connector-net/
> 
> ドライバがSSHトンネリングをサポートしているという情報もあり
> ワンチャンTera Termを使わなくてもいけるかもしれないです

これは、SSH.NETを使ってSSHトンネルを作る方法ですね。
ドライバがトンネリングをサポートしているのではなく、SSHのライブラリを使ってトンネルを自分で作っています。

以下、昔書いたコードを少し修正した物です。
この時は、パスワード無しの秘密鍵を使ってトンネルして接続していました。
なお、nugetでSSH.NETをインストールする必要があります。

const string SshHost = "example.com";                  // SSH接続先サーバー名
const int SshPort = 22;                                // SSHポート番号
const string SshUser = "ssh-user";                     // SSH接続ユーザー
const string SshFile = @"C:\Users\user\.ssh\id_ecdsa"; // SSH接続用秘密鍵
const string MySqlHost = "mysql-server";               // MySQLサーバー名 (SSH接続先サーバーから接続する名前やIPアドレス)
const int MySqlPort = 3306;                            // MySQLポート番号
const string MySqlUser = "mysql-user";                 // MySQL ログインユーザー名
const string MySqlPassword = "mysql-password";         // MySQL ログインパスワード
const string MySqlDatabase = "mysql-database";         // MySQL データベース名

// SSHの接続。
var connectionInfo = new ConnectionInfo(SshHost, SshPort, SshUser, new AuthenticationMethod[]
{
  new PrivateKeyAuthenticationMethod(SshUser, new PrivateKeyFile[]{
      new PrivateKeyFile(SshFile, "")
  })
});
using var ssh = new SshClient(connectionInfo);
ssh.Connect();

if (!ssh.IsConnected)
{
    Console.WriteLine("接続失敗");
    return;
}

// ポートフォワードの設定。ローカルポートは自動的に設定。
using var fpl = new ForwardedPortLocal("127.0.0.1", MySqlHost, MySqlPort);
ssh.AddForwardedPort(fpl);
fpl.Start();
if (!fpl.IsStarted)
{
    Console.WriteLine("ポートフォワード失敗");
    return;
}

// MySQLサーバーへの接続
var csb = new MySqlConnectionStringBuilder
{
    Server = fpl.BoundHost,
    Port = fpl.BoundPort,
    UserID = MySqlUser,
    Password = MySqlPassword,
    Database = MySqlDatabase
};
using var conn = new MySqlConnection(csb.ToString());
conn.Open();

引用返信 編集キー/
■101840 / inTopicNo.6)  Re[3]: ubuntu サーバーへの接続について
□投稿者/ kitakitune (9回)-(2023/04/28(Fri) 20:22:50)
No101837 (伝説のカレー さん) に返信
> ■No101836 (kitakitune さん) に返信
>
ありがとうございました。
暗号化した設定ファイルを作成して、読み込むことにしました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -