当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-01-25 22:43:00  来源:本站整理

<b>MySQL在网络安全方面采纳的主要办法</b>[MySQL防范]

赞助商链接



  本文“<b>MySQL在网络安全方面采纳的主要办法</b>[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
 

随着网络的遍及,基于网络的利用也越来越多.网络数据库就是此中之一.通过一台或几台服务器可认为很多客户供应服务,这种方法给人们带来了很多便利,但也给不法分子造成了可乘之机.由于数据都是通过网络传输的,这便可以在传输的历程中被截获,大概通过非常离段进入数据库.由于以上缘由,数据库安全就显得非常重要.因此,本文就以上问题谈论了MySQL数据库在网络安全方面的一些办法.

 

账户安全

 

账户是MySQL最简单的安全办法.每一账户都由用户名、密码以及位置(普通由服务器名、IP或通配符)构成.如用户john从server1举行登录大概和john从server2登录的权限差别.

 

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中的数据.它们都是布尔型,即要末答应,要末不答应.下面是这些特权的列表:

 

·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功效.

 

SHOW VARIABLES LIKE 'have_openssl' ;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| have_openssl | NO |

+---------------+-------+

1 row in set (0.00 sec)

假如返回的是NO,那么阐明你需求将OpenSSL编译进自己的MySQL在有时你大概需求将用户名和密码举行加密传输.在这时可以利用下面GRANT号令:

 

GRANT ALL PRIVILEGES ON ssl_only_db.
* to 'abc'@'%' IDENTIFIED BY "password!" REQUIRE SSL;

还可以通过 REQUIRE x509 选项举行SSL传输:

 

GRANT ALL PRIVILEGES ON ssl_only_db.
* to 'abc'@'%' IDENTIFIED BY "password!" REQUIRE x509;

你还可以利用REQUIRE SUBJECT来指定一个特定的客户端证书来拜候数据库.

 

GRANT ALL PRIVILEGES ON 
ssl_only_db.* to 'abc'@'%'
IDENTIFIED BY "password!"
REQUIRE SUBJECT "/C=US/ST=New 
York/L=Albany/O=Widgets Inc./CN=client-ray.
example.com/emailAddress=raymond@example.com";

大概你并不关心利用的是什么客户答应,而仅仅关心的是你的证书.那么你可以利用REQUIRE ISSUER来实现:

 

GRANT ALL PRIVILEGES ON ssl_only_db.
* to 'abc'@'%' IDENTIFIED BY "password!"
REQUIRE ISSUER 
"/C=US/ST=New+20York/L=Albany/O=Widgets Inc./CN=cacert.example.
com/emailAddress=admin@example.com";

SSL还可以直接通过密码举行加密.可以利用REQUIRE CIPHER设置密码.

 

GRANT ALL PRIVILEGES ON ssl_only_db.
* to 'abc'@'%' IDENTIFIED BY "password!"
REQUIRE CIPHER "EDH-RSA-DES-CBC3-SHA";

上面利用了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函数:

 

SELECT MD5('pa55word');

+----------------------------------+

| MD5('pa55word') |

+----------------------------------+

| a17a41337551d6542fd005e18b43afd4 |

+----------------------------------+

1 row in set (0.13 sec)

下面是PASSWORD函数:

 

SELECT PASSWORD('pa55word');

+----------------------+

| PASSWORD('pa55word') |

+----------------------+

| 1d35c6556b8cab45 |

+----------------------+

1 row in set (0.00 sec)

下面是ENCRYPT函数:

 

 

SELECT ENCRYPT('pa55word');

+---------------------+

| ENCRYPT('pa55word') |

+---------------------+

| up2Ecb0Hdj25A |

+---------------------+

1 row in set (0.17 sec)

上面的每个函数都返回了一个加密后的字符串.为了辨别加密字符串的大小写,最好在利用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防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .