深爱那片海 发表于 2015-1-16 20:11:45

MYSQL教程之MySQL数据库中的平安办理计划

即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。  跟着收集的提高,基于收集的使用也愈来愈多。收集数据库就是个中之一。经由过程一台或几台服务器能够为良多客户供应服务,这类体例给人们带来了良多便利,但也给犯科份子形成了无隙可乘。因为数据都是经由过程收集传输的,这就能够在传输的过程当中被截获,大概经由过程十分手腕进进数据库。因为以上缘故原由,数据库平安就显得非常主要。因而,本文就以上成绩会商了MySQL数据库在收集平安方面的一些功效。
  帐户平安
  帐户是MySQL最复杂的平安措施。每帐户都由用户名、暗码和地位(一样平常由服务器名、ip或通配符)构成。如用户john从server1举行登录大概和john从server2登录的权限分歧。
  MySQL的用户布局是用户名/暗码/地位。这个中其实不包含数据库名。上面的两条命令为database1和database2设置了SELECT用户权限。
GRANTSELECTONdatabase1.*toabc@server1IDENTIFIEDBYpassWord1;
GRANTSELECTONdatabase2.*toabc@server1IDENTIFIEDBYpassword2;
  第一条命令设置了用户abc在毗连数据库database1时利用password1。第二条命令设置了用户abc在毗连数据库database2时利用password2。因而,用户abc在毗连数据库database1和database2的暗码是纷歧样的。
  下面的设置长短常有效的。假如你只想让用户对一个数据库举行无限的会见,而对别的数据库不克不及会见,如许能够对统一个用户设置分歧的暗码。假如不如许做,当用户发明这个用户名能够会见别的数据库时,那将会形成贫苦。
  MySQL利用了良多受权表来跟踪用户和这些用户的分歧权限。这些表就是在mysql数据库中的MyISAM表。将这些平安信息保留在MySQL中长短常成心义的。因而,我们可使用尺度的SQL来设置分歧的权限。
  一样平常在MySQL数据库中可使用3种分歧范例的平安反省:
  ・登录考证
  也就是最经常使用的用户名和暗码考证。一但你输出了准确的用户名和暗码,这个考证便可经由过程。
  ・受权
  在登录乐成后,就请求对这个用户设置它的详细权限。如是不是能够删除数据库中的表等。
  ・会见把持
  这个平安范例更详细。它触及到这个用户能够对数据表举行甚么样的操纵,如是不是能够编纂数据库,是不是能够查询数据等等。
  会见把持由一些特权构成,这些特权触及到所何利用和操纵MySQL中的数据。它们都是布尔型,即要末同意,要末不同意。上面是这些特权的列表:
  ・SELECT
  SELECT是设定用户是不是可使用SELECT来查询数据。假如用户没有这个特权,那末就只能实行一些复杂的SELECT命令,如盘算表达式(SELECT1+2),或是日期转换(SELECTUnix_TIMESTAMP(NOW()))等。
  ・INSERT
  ・UPDATE
  ・INDEX
  INDEX决意用户是不是能够对表的索引举行设置。假如用户没有这个权限,那末将没法设置表中的索引。
  ・ALTER
  ・CREATE
  ・GRANT
  假如一个用户具有这个GRANT权限,那末他就能够将本人的权限授给其余用户。也就是说,这个用户能够和别的用户共享本人的权限。
  ・REFERENCES
  有了REFERENCES权限,用户就能够将别的表的一个字段作为某一个表的外键束缚。
  除以上的权限外,MySQL另有一些权限能够对全部MySQL举行操纵。
  ・Reload
  这个权限可使用户有权实行各类FLUSH命令,如FLUSHTABLES,FLUSHSTATUS等。
  ・Shutdown
  这个权限同意用户封闭MySQL
  ・PRocess
  经由过程这个权限,用户能够实行SHOWPROCESSLIST和KILL命令。这些命令能够检察MySQL的处置历程,能够经由过程这类体例检察SQL实行的细节。
  ・File
  这个权限决意用户是不是能够实行LOADDATAINFILE命令。给用户这个权限要稳重,由于有这个权限的用户能够将恣意的文件装载到表中,如许对MySQL是非常伤害的。
  ・Super
  这个权限同意用户停止任何查询(这些查询大概并非这个用户实行的)。
  以上几种权限长短常伤害的,在给用户受权限时要十分审慎。
  MySQL中的SSL
  以上的帐户平安只是以一般的Socket举行数据传输的,如许十分不平安。因而,MySQL在4.1版今后供应了对SSL(SecureScoketsLayer)的撑持。MySQL利用的是收费的OpenSSL库。
  因为MySQL的linux版本一样平常都是随Linux自己一同公布,因而,它们默许时都不利用SSL举行传输数据。假如要翻开SSL功效,必要对hava_openssl变量举行设置:
  MySQL的Windows版本已将OpenSSL到场了。也面的命令是检察你的MySQL是不是翻开了SSL功效。
SHOWVARIABLESLIKEhave_openssl;
+---------------+-------+
|Variable_name|Value|
+---------------+-------+
|have_openssl|NO|
+---------------+-------+
1rowinset(0.00sec)
  假如前往的是NO,那末申明你必要将OpenSSL编译进本人的MySQL
  在偶然你大概必要将用户名和暗码举行加密传输。在这时候可使用上面GRANT命令:
GRANTALLPRIVILEGESONssl_only_db.*toabc@%IDENTIFIEDBY"password!"REQUIRESSL;
  还能够经由过程REQUIREx509选项举行SSL传输:
GRANTALLPRIVILEGESONssl_only_db.*toabc@%IDENTIFIEDBY"password!"REQUIREx509;
  你还可使用REQUIRESUBJECT来指定一个特定的客户端证书来会见数据库。
GRANTALLPRIVILEGESONssl_only_db.*toabc@%
IDENTIFIEDBY"password!"
REQUIRESUBJECT"/C=US/ST=NewYork/L=Albany/O=WidgetsInc./CN=client-ray.
example.com/emailAddress=raymond@example.com";
  大概你其实不体贴利用的是甚么客户允许,而仅仅体贴的是你的证书。那末你可使用REQUIREISSUER来完成:
GRANTALLPRIVILEGESONssl_only_db.*toabc@%IDENTIFIEDBY"password!"
REQUIREISSUER"/C=US/ST=New+20York/L=Albany/O=WidgetsInc./CN=cacert.example.
com/emailAddress=admin@example.com";
  SSL还能够间接经由过程暗码举行加密。可使用REQUIRECIPHER设置暗码。
GRANTALLPRIVILEGESONssl_only_db.*toabc@%IDENTIFIEDBY"password!"
REQUIRECIPHER"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函数
SELECTMD5(pa55word);
+----------------------------------+
|MD5(pa55word)|
+----------------------------------+
|a17a41337551d6542fd005e18b43afd4|
+----------------------------------+
1rowinset(0.13sec)
  上面是PASSWORD函数
SELECTPASSWORD(pa55word);
+----------------------+
|PASSWORD(pa55word)|
+----------------------+
|1d35c6556b8cab45|
+----------------------+
1rowinset(0.00sec)
  上面是ENCRYPT函数
SELECTENCRYPT(pa55word);
+---------------------+
|ENCRYPT(pa55word)|
+---------------------+
|up2Ecb0Hdj25A|
+---------------------+
1rowinset(0.17sec)
  下面的每一个函数都前往了一个加密后的字符串。为了辨别加密字符串的巨细写,最幸亏利用ENCRYPT天生加密字符串时,将这个字段界说成CHARBINARY范例。
  下面枚举了3种加密的办法,但我以为利用MD5加密是最好的。这是由于如许做能够将明文暗码显现在处置列表中或是查询日记中,如许便于跟踪。以下面的INSERT语句利用拔出了一笔记录,个中的暗码利用了MD5举行加密:
INSERTINTOtable1(user,pw)VALUE(user1,MD5(password1))
  能够经由过程以下的语句举行暗码考证:
SELECT*FROMtable1WHEREuser=user1ANDpw=MD5(password1)
  哈希加密办法能够很好地对暗码举行加密,利用了这类办法加密,暗码将没法恢复成明文。
MySQL部署迅速,因此移植过程不会导致生产中断。而且,较短的学习曲线可以让你的系统管理员迅速掌握它的运行和维护。而且,MySQL的易于维护和管理意味着目前的职员可以处理目前的工作。

分手快乐 发表于 2015-1-18 18:23:32

在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。

简单生活 发表于 2015-1-25 08:53:52

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

愤怒的大鸟 发表于 2015-2-2 21:29:25

也可谈一下你是怎么优化存储过程的?

海妖 发表于 2015-2-8 06:23:37

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

兰色精灵 发表于 2015-2-24 21:27:04

而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~

金色的骷髅 发表于 2015-3-7 13:48:54

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

精灵巫婆 发表于 2015-3-15 07:33:56

呵呵,这就是偶想说的

再现理想 发表于 2015-3-21 23:17:19

总感觉自己还是不会SQL
页: [1]
查看完整版本: MYSQL教程之MySQL数据库中的平安办理计划