MySQL安全

1. 安全准则

任何想要在连接到公网的计算机上使用MySQL的人都应该阅读本节,以避免最常见的安全错误。

在讨论安全性时,有必要考虑完全保护整个服务器主机,而不仅仅是MySQL服务器,以防止所有类型的攻击:窃听,更改,重放和拒绝服务。我们并不涵盖可用性和容错的所有方面。


MySQL使用基于访问控制列表(ACL)的安全策略管理所有的连接、查询以及用户尝试执行的其它操作。MySQL还支持客户端和服务器之间的SSL加密连接。这里讨论的许多概念并不仅仅是针对MySQL的,而是几乎适用于所有应用程序的。


运行MySQL时,请遵循以下准则:

● 不要给除了root账号以外的任何人访问mysql.user表的权限!这是至关重要的。


● 了解MySQL访问权限系统的工作原理。使用grant和revoke语句来控制对MySQL的访问。不要授予比必要更多的权限。决不授予所有主机的访问权限。

检查清单:

        ■ 运行mysql -u root. 如果不需要密码即可连接成功,那么任何人都可以以root账号的身份连接到你的MySQL服务器;

        ■ 使用show grants语句来检查所有账号的权限。然后使用revoke语句删除那些不必要的访问权限;


● 不要在你的数据库中存储明文密码。因为如果你的计算机遭到入侵,那么入侵者可以获取完整的密码列表并使用它们。相反,使用SHA2()或其它单向散列函数并存储散列值。


要防止使用彩虹表进行密码恢复,请勿直接在普通密码上使用这些函数;而是应该选择一些字符串作为salt,并使用hash ( hash ( password ) + salt)的值。


● 不要从字典中选择密码。因为存在破解密码的特殊程序。即使像"xfish98"这样的密码也很糟糕。更好的是"duag98",它包含的也是单词"fish",但在标准键盘上取了"fish"中每个字母左侧的那个字母。另一种方法是使用句子中每个单词的首字母提取的密码(例如,"Four score and seven years ago"的密码是"Fsasya")。这样的密码很容易记住和键入,但对于不知道句子的人却很难猜出。而且,你还可以用数字取代数字单词,以获得短语"4 score and 7 years ago",从而产生密码"4sa7ya",这更难以猜测。


● 投资于防火墙。这可以保护你免受来自各种软件所有类型漏洞中至少50%的伤害。将MySQL放在防火墙后面或放在非军事区域(DMZ)中。

检查清单:

        ■ 尝试使用nmap等工具从Internet上扫描你的端口。MySQL的默认端口为3306。这个端口不应该能够被不受信任的主机所访问,即不受信任的主机应不能访问此端口。检查你的MySQL端口是否打开的一个简单方法是,尝试从一些远程计算机上执行以下命令,其中server_host是运行MySQL服务器的主机的主机名或IP地址

如果telnet挂起或连接被拒绝,那么说明端口被限制了,这就是期望的结果。如果连接成功并收到一些垃圾字符,则说明端口是打开的,那么此时你应该在防火墙或路由器上关闭该端口,除非你真的有一个很好的理由保持打开。


● 访问MySQL的应用程序不应该信任用户输入的任何数据,应该使用适当的防御性编程技术编写这些应用程序。


● 不要在互联网上传输普通的(未加密的)数据。所有有时间和能力拦截它的人都可能获取到这些信息,并将其用于自己的目的。相反,我们应该使用加密的协议,如SSL或SSH。MySQL支持内部SSL连接。另一种技术是使用SSH端口转发来创建用于通信的加密(和压缩)隧道。


● 学习使用tcpdump和strings实用工具。在大多数情况下,你可以通过以下命令来检查MySQL数据流是否未加密:


如果你没有看到明文数据,这并不总是意味着信息是加密的。如果你需要高安全性,请咨询安全专家。



2. 保证密码安全

密码出现在MySQL内的几个上下文中。下面的部分提供了指导原则,使终端用户和管理员能够确保这些密码的安全,避免暴露它们。还有一个关于MySQL如何在内部使用密码散列的讨论。


2.1 终端用户密码安全指南

MySQL用户应该使用以下准则来保证密码安全。


当你运行客户端程序连接到MySQL服务器时,以一种将其暴露给其他用户的方式来指定密码是不明智的。这里列出了在运行客户端程序时可以用来指定密码的方法,以及每种方法的风险评估。简而言之,最安全的方法是让客户端程序提示输入密码,或者在恰当保护的选项文件中指定密码。


      ● 在命令行上使用 -pyour_pass 」或「--password=your_pass」选项。例如:

        

这种方法很方便,但不安全。在某些系统中,系统状态程序可以看到你的密码,比如其他用户可以调用ps,以显示命令行。在初始化序列期间,MySQL客户端通常会用零覆盖命令行中的密码参数。但是,仍然有一段短暂的时间间隔,值是可见的。此外,在某些系统上,这种覆盖策略是无效的,密码对于ps仍旧可见。


如果你的操作环境设置为在终端窗口的标题栏中显示当前命令,那么只要命令正在运行,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值