MySQL安全性,官方文档永远是最好的复习资料啊,英文慢慢看~
6.1常见安全性话题
6.1.1 安全性指引
当运行MySQL时,遵循如下的指导方针:
- 永远不要给任何人mysql数据库中user表的权限。这是极重要的。(MySQL root 账户除外)
-
了解MySQL访问特权系统工作的机制(6.2:MySQL访问特权系统)。使用GRANT和REVOKE语句来控制对MySQL的访问。不要给出超出需求的权限。绝不把权限给到所有主机。
Checklist:- 运行
mysql -u root
。如果你不被要求输入密码就可以连接成功,那么任何人都可以使用拥有最高权限的MySQL root 用户连接到你的MySQL服务器。回顾下MySQL安装指导,特别注意看一下设置root密码的内容。参考2.10.4--“加密初始MySQL账户”。 - 使用
SHOW GRANTS
语句来检查账户都分别拥有什么访问权。然后使用REVOKE
语句来移除非必要的特权。
- 运行
- 不要在你的数据库中存储明文密码。这会使你的电脑变得极不安全,因为侵入者可以拿到所有的密码列表然后使用它们。因此,取代明文密码,使用SHA2()或其他的单项哈希方法加密密码,然后存储哈希值。
为了防止使用彩虹表进行密码恢复, 请不要在普通密码上使用这些函数;相反, 选择一些要用作 salt 的字符串, 然后使用哈希 (hash(password) + salt) 值。 - 不要使用字典中的单词或词组作为密码。存在破解密码的特殊程序。即使是类似于"xfish98"这样的密码都是不安全的。但是如果是“duag98”就好多了,这个密码也包含fish这也词语,但是输入的是对应的字母在标准键盘上左侧的键。另一种密码的创立方式是取用一句话的每个单词的第一个字母(例如,“Four score and seven years ago”可以得到一个密码"fsasya")。这种密码易于记忆和输入,但是很难被其他不知道这句话的人猜到。这种情况下,你还可以使用数字来代替数字单词得到短语4score and 7years ago,然后得到密码4sa7ya这个更难被猜中的密码。
- 建立防火墙(invest in a firewall).这在任何软件中都可以帮助你至少拦截50%的攻击。将MySQL服务器放在防火墙后面或者放置在非军事区域(DMZ)。
Checklist: - 尝试在网络上使用类似于nmap的工具扫描你的端口。MySQL默认使用3306端口。这个端口不应该被不受信任的主机访问。有一种简单的当时检查你的MySQL端口是否是公开的,在一些远程机器上运行下面的语句:
telnet server_host 3306
,其中server_host是你的MySQL服务器所在的主机的主机名或IP地址。如果telnet 挂住或者连接被拒绝,说明端口是阻塞的,这应该是理想的状态。如果你取得连接,并获得一些垃圾字符,则说明该端口是开放的,你应该在你的防火墙或陆游上关闭这个端口,除非你有非常合理的理由保持该端口开放。 - 访问MySQL的应用不应该信任任何由用户输入的数据,而应该通过使用合适的守卫程序技术来写MySQL。参见6.1.7——"客户端程序安全指引"
- 不要通过网络传输普通(未加密的)密码,因为网络传输信息会暴露给所有有时间和能力拦截网络信息的人,然后这些经过网络传输的信息就会被他们用于他们自己的目的。因此,使用SSL、SSH这样的加密协议。MySQL支持内部SSl连接。另一种技巧就是使用SSH 端口转发来创建一个加密的(且是压缩的)信息传输通道。
- 学习使用tcpdump和strings工具。大多数情况下,你可以通过执行下面这样的命令来检查MySQL数据流是否是加密的:
shell>tcpdump -1 -i eth0 -w - src or dst port 3306|strings
这个命令在Linux下有效。在其他的系统平台下应该使用最小的修改。
警告:
即使你没有看到明文数据,也并不意味着信息实际上是加密的。如果你需要比较高的安全性,请咨询安全专家。
##本节疑问:
使用彩虹表进行密码恢复?
密码破译
密码破译是指在不知道密钥的情况下,恢复出密文中隐藏的明文信息的过程。密码破译也是对密码*的攻击。成功的密码破译能恢复出明文或密钥,也能够发现密码*的弱点。
密码破译技术是指实施密码破译过程中常用的各种技术、手段、措施、方法和工具。
在计算机网络传输过程中,除了合法的接收者外,还有非授权者,非授权者通过各种办法在信息传输过程中截取信息(如搭线窃听、电磁窃听、声音窃听等来取机密信息),因此机密信息在网络中传输通常要进行加密,但有时还是能够被非授权用户截获,通过密码破译获得明文甚至是密钥,使机密泄露。
密码破译的方法:
- 穷尽搜索:破译密文最简单的方法,就是尝试所有可能的钥匙组合。假设破译者有识别正确解密结果的能力,经过多次密钥尝试,最终会有一个钥匙让破译者得到原文,这个过程就称为密钥的穷尽搜索。
- 密码分析:在不知其钥匙的情况下,利用数学方法破译密文或找到钥匙的方法,称为密码分析(Cryptanalysis)。密码分析有两个基本的目标:利用密文发现明文;利用密文发现钥匙。根据密码分析者破译(或攻击)时已具备的前提条件,通常将密码分析攻击法分为4种类型。
字典破解
对于采用穷举密码进行尝试工作或暴力破解注册码时,我们都需要使用字典作为破解的基础数据。破解的成功与否和字典数据的匹配程度息息相关。
彩虹表
直接建立出一个数据文件,里面事先记录了采用和目标采用同样算法计算后生成的Hash散列数值,在需要破解的时候直接调用这样的文件进行比对,破解效率就可以大幅度地,甚至成百近千近万倍地提高,这样事先构造的Hash散列数据文件在安全界被称之为Table。其实简单理解就是使用一个大型数据字典来进行快速匹配暴力破解的方法,以空间来换取时间的方法。
对于HASH的传统做法是把H(X)的所有输出穷举,查找H(X[y])==H(P),得出P==X[y]。而彩虹表则是使用散列链的方式进行。"散列链"是为了降低传统做法空间要求的技术,想法是定义一个衰减函数 R 把散列值变换成另一字符串。通过交替运算H函数和R函数,形成交替的密码和散列值链条。
[[基础技能] 安全技术——哈希算法密码破解之彩虹表(Rainbow Table)学习](https://www.cnblogs.com/yushuo1990/p/6007068.html)