可管理多台远程mysql服务器的phpmyadmin_从一个phpMyAdmin安装管理多个MySQL服务器(使用SSL加密)...

本文档介绍了如何通过一个phpMyAdmin安装管理多个MySQL服务器,包括本地和远程,确保所有通信使用SSL加密。首先,确保远程MySQL服务器上的SSL支持已启用,然后创建并传输必要的SSL证书,最后配置允许使用SSL连接的MySQL用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从一个phpMyAdmin安装(使用SSL加密)管理多个MySQL服务器

本教程介绍如何从一个phpMyAdmin安装中管理多个MySQL服务器。 为了安全起见,phpMyAdmin与任何远程MySQL服务器之间的通信都使用SSL加密(这对于本地MySQL服务器来说不是必需的,因为phpMyAdmin和MySQL之间的通信并不离开服务器)。 phpMyAdmin是一种用PHP编写的免费软件工具,旨在通过万维网处理MySQL的管理。 phpMyAdmin支持与MySQL的广泛的操作。

我不会保证这将为您工作!

1初步说明

在本教程中,我将介绍如何管理两个MySQL服务器 - 一个本地( local.example.com ,IP地址为192.168.0.100 - 这是安装了phpMyAdmin的服务器)和一个远程服务器( 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 shell上运行以下命令:

show variables like '%ssl%';

如果输出如下( has_openssl和have_ssl都显示为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 shell?

quit;

...并打开/etc/mysql/my.cnf :

vi /etc/mysql/my.cnf

向下滚动到*安全功能部分(在[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 -p

show 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 shell。

确保安装了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

(在/ var / log / syslog在remote.example.com )和

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

Enter password:

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/newcerts

创建CA证书(我在这里使用/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/newcerts回到remote.example.com ,我们可以将这三个文件传输到local.example.com ,如下所示:

remote.example.com:

scp /etc/mysql/newcerts/ca-cert.pem root@local.example.com:/etc/mysql/newcerts

scp /etc/mysql/newcerts/client-cert.pem root@local.example.com:/etc/mysql/newcerts

scp /etc/mysql/newcerts/client-key.pem root@local.example.com:/etc/mysql/newcerts

接下来,打开/etc/mysql/my.cnf ...

vi /etc/mysql/my.cnf

...并修改*安全功能部分; 取消注释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 shell。 我们现在要创建一个允许从local.example.com连接到remote.example.com的MySQL root用户,需要使用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 shell:

quit;

就是这样 - 我们现在有一个MySQL root用户可以从local.example.com连接到remote.example.com ,但需要使用SSL加密。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值