比方说,我有一个在地球另一端的SQL数据库的服务器。 通过互联网build立连接是否安全? 例如使用MySQL Workbench。
我问,因为我听说与服务器的连接,特别是使用这些软件,默认情况下是不encryption的。 如果我为每个远程连接强制使用SSL,还有什么风险? 是一个开放的MySQL端口本身的安全风险?
MySQL参考手册包含整个安全性的第6章 。
首先,你不应该允许来自互联网任何地方的连接,而只能从已知的可信主机。 虽然用户也有允许的主机列表, 6.1.1安全指南build议在主机甚至连接到MySQL服务器(默认端口3306 )之前,在防火墙级别执行此操作。 这增加了安全性,因为它也阻止了使用任何潜在的漏洞。
如果您确实需要在本地工作台和远程MySQL服务器之间build立直接连接, 请使用安全连接 。 但是,还有其他方法可以保护与SQL服务器的连接。 考虑到访问控制和保护与OpenSSL的SQL连接所需的努力,它们更加实用:
使用SSH隧道,您可以像安装工作台那样连接您的MySQL服务器。 本示例将本地端口13306和隧道连接绑定到远程端的localhost:3306 :
ssh -L 13306:localhost:3306 [email protected]
使用VPN并仅允许来自内部VPNnetworking的连接。
使用这两种方法,您只能将MySQL绑定到localhost ; 这是最安全的select。
给你一个问题的答案:不,这是不安全的。
只是为了说出一些安全问题:
1:login您的login数据通过互联网传输明文,你不想明显:)
2:SQL查询您发送的查询(及其响应)以纯文本格式发送,您不希望这样做,因为可以轻松地篡改该数据。
而且,以明文forms返回可能包含敏感信息的查询结果是另外一个问题。 在个人文件的情况下,甚至可能在一些国家被起诉,忽视/忽略个人数据的安全指南。
3:在互联网上打开的SQL端口总是一个潜在的恶意用户的额外的攻击媒介。 想想远程mysql服务器漏洞等
我已经sumarized你需要遵循的步骤,假设你在Linux上运行一个MySQL服务器:
在mysql服务器上,生成一个mysql的ssl证书:
提炼CA CA私钥:
openssl genrsa 4096 > ca-key.pem
使用先前创build的密钥生成证书(回答默认问题):
openssl req -sha256 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
接下来为mysql服务器创build一个新的私钥(同样,默认的问题):
openssl req -sha256 -newkey rsa:4096 -days 730 -nodes -keyout server-key.pem > server-req.pem
导出私钥:
openssl rsa -in server-key.pem -out server-key.pem
创build服务器证书:
openssl x509 -sha256 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
现在在你的my.cnf(位于/etc/mysql/my.cnf)编辑mysqld部分并添加下面的内容:
ssl-ca = / etc / mysql / ca-cert.pem ssl-cert = / etc / mysql / server-cert.pem ssl -key = / etc / mysql / server-key.pem
重启你的mysql服务:
service mysql restart
现在你有你的mysql服务器运行服务器证书,接下来我们将添加一个用户从一个特定的地址(你的远程静态IP如果可能的话),所以在你的MySQL控制台执行以下操作:
GRANT ALL PRIVILEGES ON 'database'.* TO 'yourremotelogin'@'your.remote.ip.xxx' IDENTIFIED BY 'password' REQUIRE SSL; FLUSH PRIVILEGES;
好吧,现在我们有一个SSL mysql服务器,它接受来自您的特定ip的通过SSL的远程连接,但是我们仍然需要生成客户端证书:
所以,仍然在MySQL服务器上执行以下操作:
openssl req -sha256 -newkey rsa:4096 -days 730 -nodes -keyout client-key.pem > client-req.pem openssl rsa -in client-key.pem -out client-key.pem openssl x509 -sha256 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
现在将ca-cert.pem,client-key.pem和client-cert.pem复制到您的mysql工作台所在的远程PC上。
在mysql工作台中打开服务器连接pipe理并编辑你的服务器的现有连接。 在conenction选项卡中,selectSSL子选项卡并select“使用SSL要求”。
在下面的字段中,select您的SSL CA文件的ca-cert.pem,SSL CERT文件的cielnt-cert.pem和SSL密钥文件的client-key.pem。
现在,如果你尝试连接,你仍然会被要求input一个密码(你之前定义的),但是它是通过SSL的:)
希望这个答案是你正在寻找的答案。