当前位置:嗨网首页>书籍在线阅读

13-MySQL的安全性问题

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

3.6 MySQL的安全性问题

本节视频教学录像:4分钟

随着网络的普及,基于网络的应用也越来越多,MySQL作为网络数据库就是其中之一。通过一台或几台服务器可以为很多客户提供服务,这种方式给人们带来了很多便利,但也存在安全性问题。下面介绍MySQL数据库在网络安全方面的一些功能。

1.账户安全

账户是MySQL最简单的安全措施。每一账户都由用户名、密码以及位置(一般由服务器名、IP或通配符)组成。MySQL的用户结构是用户名/密码/位置。这其中并不包括数据库名。下面的两条命令为database1和database2设置了SELECT用户权限。

GRANT SELECT ON database1. to 'abc'@'server1' IDENTIFIED BY 'password1'; GRANT SELECT ON database2. to 'abc'@'server1' IDENTIFIED BY 'password2';

第一条命令设置了用户abc在连接数据库database1时使用password1。第二条命令设置了用户abc在连接数据库database2时使用password2。因此,用户abc在连接数据库database1和database2的密码是不一样的。

上面的设置是非常有用的。如果只想让用户对一个数据库进行有限的访问,而对其他数据库不能访问,这样可以对同一个用户设置不同的密码。如果不这样做,当用户发现这个用户名可以访问其他数据库时,那将会造成麻烦。

MySQL使用了很多授权表来跟踪用户和这些用户的不同权限。这些表就是在MySQL数据库中的MyISAM表。将这些安全信息保存在MySQL中是非常有意义的。因此,可以使用标准的SQL来设置不同的权限。

一般在MySQL数据库中可以使用3种不同类型的安全检查。

⑴登录验证:也就是最常用的用户名和密码验证。一旦输入了正确的用户名和密码,这个验证就可通过。

⑵授权:在登录成功后,就要求对这个用户设置它的具体权限,如是否可以删除数据库中的表等。

⑶访问控制:这个安全类型更具体。它涉及用户可以对数据表进行什么样的操作,如是否可以编辑数据库,是否可以查询数据等。访问控制由一些特权组成,这些特权涉及到如何操作MySQL中的数据。它们都是布尔型,即要么允许,要么不允许。

2.MySQL中的SSL

以上的账户安全只是以普通的Socket进行数据传输的,这样非常不安全。因此,MySQL在4.1版以后提供了对SSL(Secure Scokets Layer)的支持。MySQL使用的是免费的OpenSSL库。

由于MySQL的Linux版本一般都是随Linux本身一起发布,因此,它们默认时都不使用SSL进行传输数据。如果要打开SSL功能,需要对hava_openssl变量进行设置:MySQL的Windows版本已经加入了OpenSSL。

3.哈希加密

如果数据库保存了敏感的数据,如银行卡密码、客户信息等,用户可能想将这些数据以加密的形式保存在数据库中。这样即使有人进入了用户自己的数据库,并看到了这些数据,也很难获得其中的真实信息。

在应用程序的大量信息中,也许只想对很小的一部分进行加密,如用户的密码等。这些密码不应该以明文的形式保存,它们应该以加密的形式保存在数据库中。一般情况下,大多数系统中包括MySQL本身都是使用哈希算法对敏感数据进行加密的。

哈希加密是单向加密,也就是说,被加密的字符串是无法得到原字符串的。这种方法使用很有限,一般只使用在密码验证或其他需要验证的地方。在比较时并不是对加密字符串进行解密,而是对输入的字符串也使用同样的方法进行加密,再与数据库中的加密字符串进行比较。这样即使知道了算法并得到了加密字符串,也无法还原最初的字符串。银行卡密码就是采用的这种方式进行加密。

MySQL提供了4个函数用于哈希加密:PASSWORD,ENCRYPT,SHA1和MD5。