任何一台电脑连接到互联网上使用MySQL应该阅读本节以避免最常见的安全错误。
在讨论安全,有必要考虑完全保护整个服务器主机(不仅仅是MySQL服务器)对所有类型的适用的攻击:窃听,改变,回放,拒绝服务。我们不涵盖所有方面的可用性和容错。
MySQL使用基于访问控制列表(acl)的安全连接,查询等操作,用户可以尝试执行。也有支持ssl加密MySQL客户端和服务器之间的连接。这里所讨论的许多概念都不是特定于MySQL;适用于几乎所有的应用程序具有相同的思路。
当运行MySQL,遵循这些指导方针:
不要给任何人(除了MySQL吗
根
账户)访问用户
表中mysql
系统数据库!这是至关重要的。了解MySQL访问特权系统(见工作第四章,访问控制和帐户管理)。使用
格兰特
和撤销
语句来控制访问MySQL。不给予更多不必要的特权。没有权限授予所有主机。检查表:
试一试
mysql - u根
。如果你能成功连接到服务器没有被要求输入密码,任何人都可以连接到MySQL服务器为MySQL根
用户提供完整的特权!查看MySQL安装说明,特别重视信息设置根
密码。看到3.4节,“获得最初的MySQL账户”。
不明文的密码存储在您的数据库。如果你的电脑变得妥协,入侵者可以把密码和使用它们的完整列表。相反,使用
SHA2 ()
或其他一些单向散列函数和存储的散列值。为了防止密码恢复使用彩虹表,不使用这些函数在一个普通的密码;相反,选择一些字符串用作盐,并使用散列(散列(密码)+盐)值。
不要选择密码的字典。特殊项目存在破密码。甚至密码如”xfish98”非常糟糕。更好的是”duag98”其中包含相同的单词”鱼”但左输入一个关键标准的QWERTY键盘。另一种方法是使用一个密码,从句子中每个单词的第一个字符(例如,”四个分数和七年前”结果的密码”Fsasya”)。密码是容易记住和类型,但很难猜,不知道这句话的人。在这种情况下,你可以另外用数字代替文字数量获得这个短语”4分和7年前”,密码”4 sa7ya”这是更难猜测。
投资于一个防火墙。这样做可以至少50%的所有类型的利用在任何软件。将MySQL防火墙后面或非军事区(DMZ)。
检查表:
尝试扫描你的港口等互联网使用工具
nmap
。MySQL使用默认端口3306。这个港口不应该访问来自不受信任的主机。作为一个简单的方法来检查你的MySQL端口是否开放,试试下面的命令从远程机器,server_host
是主机的主机名或IP地址,你的MySQL服务器运行:$ > telnetserver_host3306年
如果远程登录挂起或连接被拒绝,港口被阻塞,这是你想要的方式。如果你得到一个连接和一些垃圾字符,该端口是打开的,并且应该被关闭在你的防火墙或路由器,除非你真的有理由保持开放。
应用程序访问MySQL不应该相信用户输入任何数据,并且应该使用适当的防御性编程技术。看到2.7节,“客户端编程安全指导方针”。
不要在互联网上传输纯(加密)数据。这些信息都可以访问每个人有时间和能力去拦截它并使用它自己的目的。相反,使用诸如SSL加密的协议或SSH。MySQL支持内部SSL连接。另一种方法是使用SSH端口转发来创建一个加密的通信(压缩)隧道。
学习使用tcpdump和字符串实用工具。在大多数情况下,您可以检查MySQL数据流是否加密通过发出一个命令如下:
$ > tcpdump - l - i eth0 - w - src或dst端口3306 |字符串
这在Linux下工作的,应与其他系统下小修改。
警告如果您没有看到明文数据,这并不总是意味着实际上是加密的信息。如果你需要高安全性,安全专家咨询。