こんにちは!現場で数々のデータベース設計やセキュリティアーキテクチャを手がけてきたシニアエンジニアです。
開発現場に配属されて最初につまずきがちなのが、「本番環境やステージング環境のデータベース(DB)への安全な接続」です。
セキュリティ上、データベースをインターネット上に直接公開(パブリックアクセス可能に)することは絶対にありません。かといって、毎回重たいVPNを立ち上げたり、踏み台サーバーにSSHログインして黒い画面(CLI)でSQLを叩くのは効率が悪すぎますよね。
そこで最強のソリューションとなるのが、「DBeaver」を用いたSSHトンネル(Port Forwarding)接続です。
この記事を最後まで読み進めながら手を動かせば、セキュリティを極限まで高めた「公開鍵認証」によるSSHトンネル設定を完全にマスターできます。毎日のデータ確認やデバッグ作業が、驚くほど安全かつスピーディになりますよ!
—
1. そもそも「SSHトンネル経由」とはどういう仕組みか?
まずは、私たちがこれから構築する接続の全体像を頭に入れておきましょう。論理構造を理解しておくと、トラブルシューティングの強さが劇的に変わります。
[あなたのPC (DBeaver)]
│
│ (1) 暗号化されたSSHトンネル (Port 22)
▼
[踏み台サーバー (Bastion Host)]
│
│ (2) プライベートネットワーク内の高速接続 (Port 5432 / 3306 など)
▼
[目的のデータベース (PostgreSQL / MySQL / Oracle etc.)]
1. あなたのPCから、インターネット経由でアクセス可能な踏み台サーバー(Bastion Host)へ、安全なSSH接続を開きます。
2. その暗号化された管(トンネル)の中を通して、踏み台サーバーからしか見えないプライベート空間にある目的のDBへとリクエストを配送します。
これにより、「DB自体はインターネットから完全に隠蔽しつつ、手元のPCのDBeaverからはまるでローカルのDBを触っているかのような快適さ」を実現できるのです。
—
2. 事前準備:認証鍵(SSH Key)の確認
今回は、パスワード認証よりもはるかに安全な「公開鍵認証(Public Key Authentication)」を使用します。
手元のPCに秘密鍵(`id_ed25519` や `id_rsa` など)が用意されているか確認してください。もし未作成の場合は、ターミナルで以下のコマンドを実行して生成しておきましょう。
安全性の高い Ed25519 アルゴリズムで鍵対を生成する例
ssh-keygen -t ed25519 -C “your_email@example.com”
権限(パーミッション)が適切か確認(秘密鍵は本人しか読めない600である必要があります)
chmod 600 ~/.ssh/id_ed25519
> 💡 先輩からのアドバイス:
> 秘密鍵には必ず「パスフレーズ(Passphrase)」を設定しておきましょう。万が一、開発PCが盗難に遭った際もパスフレーズがなければDBへのアクセスを防ぐことができます。
—
3. DBeaverでのSSHトンネル設定手順(完全ステップ・バイ・ステップ)
それでは、DBeaverを起動して設定を進めましょう。今回は開発現場で最もよく使われるPostgreSQLを例に解説しますが、MySQLやOracle、SQL Serverでも手順は全く同じです。
ステップ 1: 新しい接続を作成する
1. DBeaverの左上にある 「新しい接続」アイコン(プラグのマーク) をクリックします。
2. 接続したいデータベースの種類(例: `PostgreSQL`)を選択して「次へ」をクリックします。
—
ステップ 2: 「SSH」タブの設定(ここが最重要!)
画面上部のタブから 「SSH」 を選択し、「SSHトンネルを使用」 にチェックを入れます。
各項目を以下のように埋めていきます。
| 設定項目 | 入力内容 | 解説 |
| :— | :— | :— |
| Network Manager | SSHJ または JSch | 基本はデフォルト(SSHJ推奨)でOK |
| Host/IP | 踏み台サーバーのIPアドレス(例: `54.x.x.x`) | インターネット経由でアクセスできる踏み台のホスト名 |
| Port | `22` | SSHの標準ポート番号 |
| User | SSHログインユーザー名(例: `ec2-user`, `ubuntu`) | 踏み台サーバーのアカウント名 |
| Authentication Method | Public Key | パスワードではなく「公開鍵認証」を選択 |
| Private Key | `~/.ssh/id_ed25519` のパスを選択 | あなたのPCにある秘密鍵のファイルを指定 |
| Passphrase | 秘密鍵のパスフレーズ | 鍵生成時に設定したパスフレーズを入力 |
—
ステップ 3: 「メイン」タブの設定(90%の人がハマる罠に注意!)
次に 「メイン」 タブに戻ります。ここが一番重要なポイントです!
- Host: `踏み台サーバーから見たDBのIPアドレス` または `DBのプライベートホスト名`
- Port: `5432`(PostgreSQLの場合) / `3306`(MySQLの場合)
- Database: 接続したいデータベース名(例: `production_db`)
- Authentication (DBの認証): DB自体のユーザー名とパスワードを入力
> ⚠️ 超重要!初心者が最もハマるポイント
> 「メイン」タブの `Host` に、あなたのPCから見たIPを入れてはいけません!
> ここに入力するのは「踏み台サーバーから見て、目的のDBがどこにあるか」という視点のアドレスです。
> もし「踏み台サーバーの中にDB自体も同居している」場合は、`127.0.0.1` または `localhost` になります。
—
4. 接続テストと「Hello World」クエリの実行
設定が完了したら、いきなり「完了」を押さずに、左下にある 「接続テスト (Test Connection)」 ボタンをクリックしてください。
接続に成功すると、以下のようなダイアログが表示されます。
- Connected
- Driver: PostgreSQL…
- Server: PostgreSQL…
「Hello World」動作確認SQLを実行しよう!
接続を保存したら、SQLエディタを開いて(`Ctrl + Enter` または `Cmd + Enter`)、以下の動作確認クエリを実行してみましょう。
— 接続中のデータベースのバージョンと、現在の接続時刻を取得する軽量クエリ
SELECT
version() AS db_version,
current_timestamp AS connected_at;
データが1行返ってくれば、無事にSSHトンネルを経由してリモートDBへの安全なアクセスが確立された証拠です!おめでとうございます!
—
5. プロの現場のベストプラクティス:事故を防ぐ2つの極意
ここからは、一歩差がつくシニアエンジニアの知恵を共有します。
① 本番環境データベースの「色分け」を設定する
DBeaverには、接続ごとに環境のタイプ(Development / Test / Production)を設定できる機能があります。
1. 接続を右クリック ➔ 「編集 Connection」
2. 「一般」 ➔ 「環境 (Connection type)」 を `Production` に変更する
これを設定すると、SQLエディタのステータスバーや接続タグが真っ赤に警告色表示されます。これにより「開発環境だと思って `DELETE` や `DROP` を打ったら本番環境だった…」というエンジニア最大の悪夢を未然に防ぐことができます。
② SSH Keep-Alive(無通信切断防止)を有効化する
SSH接続は、一定時間何も操作しないとネットワーク機器によって通信が切断されてしまうことがあります。
- DBeaverの「SSH」タブ ➔ 「Advanced properties」 内にある `Keep-Alive` のインターバルを `30` 秒などに設定しておくと、接続が勝手に切れるストレスから解放されます。
—
まとめ
今回の手順を振り返りましょう。
1. 暗号化された秘密鍵を用意する
2. DBeaverの「SSH」タブで踏み台サーバーへの接続情報と秘密鍵を設定する
3. 「メイン」タブで踏み台サーバーから見たDBアドレスを設定する
4. 接続テストを行い、安全にクエリが実行できることを確認する
SSHトンネル接続は、クラウド時代のインフラセキュリティにおける基本かつ最強のパターンです。一度設定してしまえば、次回からはDBeaverをダブルクリックするだけで、安全な暗号化通信が裏側で自動的に立ち上がります。
セキュリティの知識とGUIツールの利便性を組み合わせて、今日からの開発ライフを劇的に快適で安全なものにしていきましょう!応援しています!