<b>MySQL在网络安全方面采纳的主要办法</b>[MySQL防范]
本文“<b>MySQL在网络安全方面采纳的主要办法</b>[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
随着网络的遍及,基于网络的利用也越来越多.网络数据库就是此中之一.通过一台或几台服务器可认为很多客户供应服务,这种方法给人们带来了很多便利,但也给不法分子造成了可乘之机.由于数据都是通过网络传输的,这便可以在传输的历程中被截获,大概通过非常离段进入数据库.由于以上缘由,数据库安全就显得非常重要.因此,本文就以上问题谈论了MySQL数据库在网络安全方面的一些办法.
账户安全
账户是MySQL最简单的安全办法.每一账户都由用户名、密码以及位置(普通由服务器名、IP或通配符)构成.如用户john从server1举行登录大概和john从server2登录的权限差别.
MySQL的用户构造是用户名/密码/位置.这此中并不包含数据库名.下面的两条号令为database1和database2设置了SELECT用户权限.
|
第一条号令设置了用户abc在衔接数据库database1时利用password1.第二条号令设置了用户abc在衔接数据库database2时利用password2.因此,用户abc在衔接数据库database1和database2的密码是不一样的.
上面的设置是非常有效的.假如你只想让用户对一个数据库举行有限的拜候,而对别的数据库不能拜候,这样可以对同一个用户设置差别的密码.假如不这样做,当用户发现这个用户名可以拜候别的数据库时,那将会造成麻烦.
MySQL利用了很多受权表来跟踪用户和这些用户的差别权限.这些表就是在mysql数据库中的MyISAM表.将这些安全信息保存在MySQL中是非常有意义的.因此,我们可以利用尺度的SQL来设置差别的权限.
普通在MySQL数据库中可以利用3种差别范例的安全查抄:
·登录考证
也就是最常用的用户名和密码考证.一但你输入了精确的用户名和密码,这个考证便可通过.
·受权
在登录成功后,就要求对这个用户设置它的具体权限.如能否可以删除数据库中的表等.
·拜候掌握
这个安全范例更具体.它触及到这个用户可以对数据表举行什么样的操作,如能否可以编辑数据库,能否可以查询数据等等.
拜候掌握由一些特权构成,这些特权触及到所何利用和操作MySQL中的数据.它们都是布尔型,即要末答应,要末不答应.下面是这些特权的列表:
·SELECT
SELECT是设定用户能否可以利用SELECT来查询数据.假如用户没有这个特权,那么就只能履行一些简单的SELECT号令,如计算表达式(SELECT 1+2),或是日期转换(SELECT Unix_TIMESTAMP(NOW( )))等.
·INSERT ·UPDATE ·INDEX
INDEX决意用户能否可以对表的索引举行设置.假如用户没有这个权限,那么将无法设置表中的索引.
·ALTER ·CREATE ·GRANT
假如一个用户拥有这个GRANT权限,那么他便可以将自己的权限授给别的用户.也就是说,这个用户可以和别的用户同享自己的权限.
·REFERENCES:有了REFERENCES权限,用户便可以将别的表的一个字段作为某一个表的外键约束. 除了以上的权限外,MySQL还有一些权限可以对整个MySQL举行操作.
·Reload:这个权限可以利用户有权履行各种FLUSH号令,如FLUSH TABLES, FLUSH STATUS等.
·Shutdown:这个权限答应用户关闭MySQL.
·Process:通过这个权限,用户可以履行SHOW PROCESSLIST和KILL号令.这些号令可以查看MySQL的处理进程,可以通过这种方法查看SQL履行的细节.
·File:这个权限决意用户能否可以履行LOAD DATA INFILE号令.给用户这个权限要慎重,因为有这个权限的用户可以将肆意的文件装载到表中,这样对MySQL是非常危险的.
·Super:这个权限答应用户终止任何查询(这些查询大概并非这个用户履行的).
以上几种权限是非常危险的,在给用户受权限时要非常谨严.
MySQL中的SSL
以上的账户安全只是以普通的Socket举行数据传输的,这样非常不安全.因此,MySQL在4.1版今后供应了对SSL(Secure Scokets Layer)的支持.MySQL利用的是免费的OpenSSL库.
由于MySQL的Linux版本普通都是随Linux本身一同公布,因此,它们默许时都不利用SSL举行传输数据.假如要翻开SSL功效,需求对hava_openssl变量举行设置:
MySQL的Windows版本已经将OpenSSL加入了.也面的号令是查看你的MySQL能否翻开了SSL功效.
|
假如返回的是NO,那么阐明你需求将OpenSSL编译进自己的MySQL在有时你大概需求将用户名和密码举行加密传输.在这时可以利用下面GRANT号令:
|
还可以通过 REQUIRE x509 选项举行SSL传输:
|
你还可以利用REQUIRE SUBJECT来指定一个特定的客户端证书来拜候数据库.
|
大概你并不关心利用的是什么客户答应,而仅仅关心的是你的证书.那么你可以利用REQUIRE ISSUER来实现:
|
SSL还可以直接通过密码举行加密.可以利用REQUIRE CIPHER设置密码.
|
上面利用了GRANT号令对用户权限举行设置.而这些信息都是保存在受权表中,这些表是安全系统的心脏.在这些表中保存了每一个用户和客户机所具有的权限.假如精确地操作这些表,将会对数据库的安全起到主动的作用,而假如利用不慎,将是非常危险的.
下面让我们来看看MySQL中的最要的5个受权表:
user:用户表保存了用户的权限和被加密的密码.这个表负责肯定哪些用户和客户机可以衔接到服务器上.
host:这个表为每一个客户机分配权限,它并不考虑用户的权限.MySQL在肯定能否接纳还是回绝一个衔接时,首先考虑的是user表.而利用GRANT或REVOKE号令并不影响host表,我们可以通过手工方法改正这个表中的内容.
db:db表保存了数据库层的权限信息.
tables_priv:这个表存储了表的权限信息.
columns_priv:这个表保存了单独列的权限信息.通过这个表,可以将操作某一列的权限授与一个用户.
哈希加密
假如数据库保存了敏感的数据,如银行卡密码,客户信息等,你大概想将这些数据以加密的情势保存在数据库中.这样即便有人进入了你的数据库,并看到了这些数据,也很可贵到此中的真实信息.
在利用程序的大量信息中,大概你只想交很小的一部份举行加密,如用户的密码等.这些密码不该该以明文的情势保存,它们应当以加密的情势保存在数据库中.普通情形下,大大都系统,这此中包含MySQL本身都是利用哈希算法对敏感数据举行加密的.
哈希加密是单向加密,也就是说,被加密的字符串是无法得到原字符串的.这种办法利用很有限,普通只利用在密码考证或别的需求考证的地方.在对比时并非将加密字符串举行解密,而是将输入的字符串也利用一样的办法举行加密,再和数据库中的加密字符串举行对比.这样即便知道了算法并得到了加密字符串,也无法复原最初的字符串.银行卡密码就是采取的这种方法举行加密.
MySQL供应了4个函数用于哈希加密:PASSWORD, ENCRYPT, SHA1和MD5.下面让我们试一试这4个函数,看看会得到什么后果.我们以加密字符串“pa55word”为例举行阐明:
让我们先来看看MD5函数:
|
下面是PASSWORD函数:
|
下面是ENCRYPT函数:
|
上面的每个函数都返回了一个加密后的字符串.为了辨别加密字符串的大小写,最好在利用ENCRYPT生成加密字符串时,将这个字段定义成CHAR BINARY范例.
上面摆列了3种加密的办法,但我认为利用MD5加密是最好的.这是因为这样做可以将明文密码显示在处理列表中或是查询日记中,这样便于跟踪.以下面的INSERT语句利用插入了一条记录,此中的密码利用了MD5举行加密:
INSERT INTO table1 (user, pw) VALUE ('user1', MD5('password1') )
可以通过以下的语句举行密码考证:
SELECT * FROM table1 WHERE user = 'user1' AND pw = MD5('password1')
哈希加密办法可以很好地对密码举行加密,利用了这种办法加密,密码将无法恢复成明文.
以上是“<b>MySQL在网络安全方面采纳的主要办法</b>[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:本文地址: | 与您的QQ/BBS好友分享! |