MySQL管理 · 3 min read · Jan 29, 2026
1つのphpMyAdminインストールから複数のMySQLサーバーを管理する(SSL暗号化を使用)
1つのphpMyAdminインストールから複数のMySQLサーバーを管理する(SSL暗号化を使用)
バージョン 1.0
著者: Falko Timme
Twitterでフォローしてください
このチュートリアルでは、1つのphpMyAdminインストールから複数のMySQLサーバーを管理する方法を説明します。セキュリティ上の理由から、phpMyAdminとリモートMySQLサーバー間の通信はSSL暗号化を使用しています(ローカルMySQLサーバーの場合、phpMyAdminとMySQL間の通信はサーバーを離れないため、これは必要ありません)。phpMyAdminは、PHPで書かれた無料のソフトウェアツールで、World Wide Webを介してMySQLの管理を扱うことを目的としています。phpMyAdminは、MySQLに対して幅広い操作をサポートしています。
私は、これがあなたにとって機能するという保証を行いません!
1 前提条件
このチュートリアルでは、2つのMySQLサーバーを管理する方法を示します - 1つはローカル(local.example.com、IPアドレス192.168.0.100 - これはphpMyAdminがインストールされているサーバー)で、もう1つはリモートサーバー(remote.example.com、IPアドレス192.168.0.101)です - phpMyAdminインスタンスから。phpMyAdminがすでにインストールされている(手動またはディストリビューションのパッケージマネージャーを通じて)ことを前提としています。phpMyAdminを通じてローカルMySQLサーバーを管理できるはずです - ここではphpMyAdminのインストールについては説明しません。
このチュートリアルはDebian Wheezy/Ubuntu 12.04に基づいています。他のディストリビューションでは、いくつかのパスを調整する必要があるかもしれませんが、原則は同じです。
2 リモートMySQLサーバーでのSSLサポートの有効化
remote.example.com:
MySQLにログインします…
mysql -u root -p… そしてMySQLシェルで次のコマンドを実行します:
show variables like '%ssl%';出力が次のようになっている場合(both have_openssl and have_ssl show DISABLED)…
mysql> show variables like ’%ssl%’;
+—————+———-+
| Variable_name | Value |
+—————+———-+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+—————+———-+
7 rows in set (0.00 sec)
mysql>
… これは、MySQLがSSLサポートでコンパイルされているが、現在は有効になっていないことを意味します。有効にするには、まずMySQLシェルを終了します…
quit;… そして/etc/mysql/my.cnfを開きます:
vi /etc/mysql/my.cnf- Security Featuresセクション([mysqld]セクション内)までスクロールし、sslという単語を含む行を追加します:
| | [...] # * Security Features # # Read the manual, too, if you want chroot! # chroot = /var/lib/mysql/ # # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". ssl # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [...] | |
MySQLを再起動します…
/etc/init.d/mysql restart… そしてSSLが現在有効になっているかどうかを再度確認します:
mysql -u root -pshow variables like '%ssl%';出力は次のようになり、SSLが現在有効になっていることを示します:
mysql> show variables like ’%ssl%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+—————+——-+
7 rows in set (0.00 sec)
mysql>
タイプ…
quit;… MySQLシェルを終了します。
OpenSSLがインストールされていることを確認します:
apt-get install openssl次にOpenSSLのバージョンを確認します:
root@remote:~# openssl version
OpenSSL 1.0.1c 10 May 2012
root@remote:~#
もしあなたが私のようにOpenSSLバージョン1.0.1cを持っている場合、OpenSSLによって生成された証明書は次のようなエラーを引き起こします:
Sep 18 17:02:15 remote mysqld: SSL error: Unable to get private key from ‘/etc/mysql/newcerts/server-key.pem’
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] Failed to setup SSL
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] SSL error: Unable to get private key
(remote.example.comの/var/log/syslog内)および
root@local:/etc/mysql/newcerts# mysql –ssl-ca=/etc/mysql/newcerts/ca-cert.pem –ssl-cert=/etc/mysql/newcerts/client-cert.pem –ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p
パスワードを入力してください:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
root@local:/etc/mysql/newcerts#
(local.example.comでremote.example.comへの暗号化接続を確立しようとすると)、少なくともMySQL 5.5では次のようになります。:
この問題を解決するために、私たちは自分自身でOpenSSLをビルドします(OpenSSLのバージョンが1.0.1より古い場合は必要ありません):
cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config –prefix=/usr/local/openssl-0.9.8
make
make install
その後、/usr/local/openssl-0.9.8/bin/opensslに新しいOpenSSLバイナリが見つかります。
次に、SSL接続に必要なCA、サーバー、およびクライアント証明書を作成します。これらの証明書は、最初に作成する必要がある/etc/mysql/newcertsディレクトリに作成します:
mkdir /etc/mysql/newcerts && cd /etc/mysql/newcertsCA証明書を作成します(ここでは/usr/local/openssl-0.9.8/bin/opensslを使用しています; システムのOpenSSLバージョンが1.0.1より古い場合は、opensslをそのまま使用できます):
/usr/local/openssl-0.9.8/bin/openssl genrsa 2048 > ca-key.pem/usr/local/openssl-0.9.8/bin/openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pemサーバー証明書を作成します:
/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem/usr/local/openssl-0.9.8/bin/openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pemクライアント証明書を作成します:
/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem/usr/local/openssl-0.9.8/bin/openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem出力は…
ls -l… 次のようになります:
root@remote:/etc/mysql/newcerts# ls -l
total 32
-rw-r–r– 1 root root 1346 Sep 18 17:52 ca-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:52 ca-key.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 client-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 client-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 client-req.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 server-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 server-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 server-req.pem
root@remote:/etc/mysql/newcerts#
次に、ca-cert.pem、client-cert.pem、およびclient-key.pemをローカルMySQLサーバー(local.example.com)に転送する必要があります。これを行う前に、local.example.comで/etc/mysql/newcertsディレクトリを作成します:
local.example.com:
mkdir /etc/mysql/newcertsremote.example.comに戻り、次のように3つのファイルをlocal.example.comに転送できます:
remote.example.com:
scp /etc/mysql/newcerts/ca-cert.pem [email protected]:/etc/mysql/newcerts scp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcerts scp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcerts次に、/etc/mysql/my.cnfを開きます…
vi /etc/mysql/my.cnf… そして* Security Featuresセクションを修正します; ssl-ca、ssl-cert、およびssl-key行のコメントを解除し、正しい値を入力します:
| | [...] # * Security Features # # Read the manual, too, if you want chroot! # chroot = /var/lib/mysql/ # # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". ssl ssl-ca=/etc/mysql/newcerts/ca-cert.pem ssl-cert=/etc/mysql/newcerts/server-cert.pem ssl-key=/etc/mysql/newcerts/server-key.pem [...] | |
MySQLを再起動します:
/etc/init.d/mysql restart再度MySQLにログインします…
mysql -u root -p… そしてSSLが有効であり、正しい証明書が読み込まれていることを確認します:
show variables like '%ssl%';mysql> show variables like ’%ssl%’;
+—————+————————————-+
| Variable_name | Value |
+—————+————————————-+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /etc/mysql/newcerts/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /etc/mysql/newcerts/server-cert.pem |
| ssl_cipher | |
| ssl_key | /etc/mysql/newcerts/server-key.pem |
+—————+————————————-+
7 rows in set (0.00 sec)
mysql>
MySQLシェルを離れないでください。これからlocal.example.comからremote.example.comに接続できるMySQLルートユーザーを作成し、SSLを使用する必要があります:
CREATE USER ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT USAGE ON *.* TO 'root'@'192.168.0.100' REQUIRE SSL;CREATE USER ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT USAGE ON *.* TO 'root'@'local.example.com' REQUIRE SSL;FLUSH PRIVILEGES;これでMySQLシェルを離れることができます:
quit;これで完了です - local.example.comからremote.example.comに接続できるMySQLルートユーザーが作成され、SSL暗号化を使用する必要があります。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。