任何在连接到Internet的盘算机上使用MySQL的人都应该阅读本节,以避免最常见的安全错误。
在讨论安全性时,有必要思量充分保护整个服务器主机(而不但仅是MySQL服务器)免受所有范例的适用攻击:窃听、更改、播放和拒绝服务。我们在这里没有涵盖可用性和容错的所有方面。
MySQL对用户可以尝试执行的所有连接、查询和其他操作使用基于访问控制列表(ACL)的安全性。
MySQL客户端和服务器之间还支持SSL加密连接。
这里讨论的许多概念根本不是MySQL特有的;雷同的一般思想适用于险些所有的应用程序。
运行MySQL时,请遵照以下准则:
永世不要让任何人(MySQL根帐户除外)访问MySQL体系数据库中的用户表!这一点至关重要。
了解MySQL访问权限体系的工作原理(请参阅“访问控制和帐户管理”)。
使用GRANT和REVOKE语句来控制对MySQL的访问。
不要授予超过必要权限的权限。
从不向所有主机授予特权。
清单:
试试mysql-u root。如果您可以或许在不必要暗码的环境下乐成连接到服务器,任何人都可以作为MySQL根用户以完全权限连接到您的MySQL服务器!查察MySQL的安装阐明,特别注意有关设置根暗码的信息。请参阅“保护初始MySQL帐户”。
使用SHOW GRANTS语句检查哪些帐户可以访问什么。然后使用REVOKE语句删除那些不必要的特权。
不要在数据库中存储明文暗码。如果你的电脑遭到破坏,入侵者可以获取完备的暗码列表并使用它们。相反,使用SHA2()或其他单向哈希函数并存储哈希值。
为了防止使用彩虹表恢复暗码,请不要在平凡暗码上使用这些功能;相反,选择一些字符串用作salt,并使用hash(hash(password)+salt)值。
假设所有暗码都将使用已知暗码列表进行自动破解,并使用有关您的公开信息(如社交媒体帖子)进行有针对性的猜测。
不要选择由轻易破解或猜测的项目组成的暗码,如字典单词、精确名称、运动队名称、首字母缩写或常见短语,尤其是与您相关的暗码。
如果以可预测的方式使用大写字母、数字替换和添加以及特殊字符,则这些都没有帮助。别的,不要选择您在任何地方看到的用作示例的任何暗码,或其变体,纵然它是作为强暗码的示例出现的。
相反,请选择尽可能长且不可预测的暗码。这并不意味着组合必要是一个难以影象和复制的随机字符串,尽管这是一个很好的方法,例如,如果你有暗码管理软件,可以生成和添补这些暗码并安全存储。
包含多个单词的暗码短语易于创建、影象和复制,而且比由单个修改的单词或可预测的字符序列组成的典范用户选择的暗码安全得多。要创建安全的暗码短语,请确保其中的单词和其他项目不是已知的短语或引号,不会以可预测的顺序出现,而且最好相互之间没有以前的关系。
创建防火墙。这可以保护您免受任何软件中至少50%的所有范例的弊端攻击。将MySQL放在防火墙后面或非军事区(DMZ)中。
尝试使用nmap等工具从Internet扫描端口。
MySQL默认使用端口3306。不应从不受信任的主机访问此端口。作为检查MySQL端口是否打开的一种简单方法,请在某台远程盘算机上尝试以下下令,其中server_host是运行MySQL服务器的主机的主机名或IP地址:
- $> telnet server_host 3306
复制代码 如果telnet挂起或连接被拒绝,端口将被阻止,这就是OK的。
如果你得到一个连接和一些垃圾字符,端口是打开的,应该在防火墙或路由器上关闭,除非你真的有充分的来由保持它打开。
访问MySQL的应用程序不应该信任用户输入的任何数据,而且应该使用适当的防御编程技术来编写。
拜见“客户端编程安全指南”。
不要在互联网上传输纯(未加密)数据。
每个偶然间和能力拦截这些信息并将其用于自己的目标的人都可以访问这些信息。
相反,请使用加密协议,如SSL或SSH。MySQL支持内部SSL连接。
另一种技术是使用SSH端口转发来创建用于通信的加密(和压缩)隧道。
学习使用tcpdump和字符串实用程序。在大多数环境下,您可以通过发出如下下令来检查MySQL数据流是否未加密:
- $> tcpdump -l -i eth0 -w - src or dst port 3306 | strings
复制代码 这在Linux下可以工作,在其他体系下应该可以进行小的修改。
告诫:
如果您没有看到明文数据,这并不总是意味着信息实际上是加密的。如果您必要高度安全性,请咨询安全专家。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |