MySQL金典培训教程:10第七章.docx
第7章数据库安全本章要点点:v MySQQL权限限系统原原理v 如何授予予撤销用用户和授授权v 如何直接接修改授授权表v 授予用户户权限的的规范和和注意事事项作为一个个MySSQL的的系统管管理员,你你有责任任维护你你的MyySQLL数据库库系统的的数据安安全性和和完整性性。本文文主要主主要介绍绍如何建建立一个个安全的的MySSQL系系统,从从系统内内部和外外部网络络两个角角度,为为你提供供一个指指南。本章主要要考虑下下列安全全性有关关的问题题:l 为什么安安全性很很重要,你你应该防防范那些些攻击? l 服务器面面临的风风险(内内部安全全性),如如何处理理? l 连接服务务器的客客户端风风险(外外部安全全性),如如何处理理? MySQQL管理理员有责责任保证证数据库库内容的的安全性性,使得得这些数数据记录录只能被被那些正正确授权权的用户户访问,这这涉及到到数据库库系统的的内部安安全性和和外部安安全性。内部安全全性关心心的是文文件系统统级的问问题,即即,防止止MySSQL数数据目录录(DAATADDIR)被被在服务务器主机机有账号号的人(合合法或窃窃取的)进进行攻击击。如果果数据目目录内容容的权限限过分授授予,使使得每个个人均能能简单地地替代对对应于那那些数据据库表的的文件,那那么确保保控制客客户通过过网络访访问的授授权表设设置正确确,对此此毫无意意义。外部安全全性关心心的是从从外部通通过网络络连接服服务器的的客户的的问题,即即,保护护MySSQL服服务器免免受来自自通过网网络对服服务器的的连接的的攻击。你必须须设置MMySQQL授权权表(ggrannt ttablle),使使得他们们不允许许访问服服务器管管理的数数据库内内容,除除非提供供有效的的用户名名和口令令。下面就详详细介绍绍如何设设置文件件系统和和授权表表myssql,实实现MyySQLL的两级级安全性性。7.1 MySSQL的的权限系系统MySQQL有一一套先进进的但非非标准的的安全/授权系系统,掌掌握其授授权机制制是开始始操作MMySQQL数据据库必须须要走的的第一步步,对于于一个熟熟悉SQQL基本本操作的的人来说说,也是是MySSQL所所有的知知识中比比较难以以理解的的一个部部分。本本节通过过揭开其其授权系系统的运运作机制制,希望望大家能能够可以以更好地地操作和和使用这这个优秀秀的数据据库系统统。 MySQQL的安安全系统统是很灵灵活的,它它允许你你以多种种不同方方式设置置用户权权限。一一般地,你你可使用用标准的的SQLL语句GGRANNT和RREVOOKE语语句做,他他们为你你修改控控制客户户访问的的授权表表,然而而,你可可能由一一个不支支持这些些语句的的老版本本的MyySQLL(在33.222.111之前这这些语句句不起作作用),或或者你发发觉用户户权限看看起来不不是以你你想要的的方式工工作。对对于这种种情况,了了解MyySQLL授权表表的结构构和服务务器如何何利用它它们决定定访问权权限是有有帮助的的,这样样的了解解允许你你通过直直接修改改授权表表增加、删除或或修改用用户权限限,它也也允许你你在检查查这些表表时诊断断权限问问题。7.1.1授权权表的结结构通过网络络连接服服务器的的客户对对MySSQL数数据库的的访问由由授权表表内容来来控制。这些表表位于mmysqql数据据库中,并并在第一一次安装装MySSQL的的过程中中初始化化(运行行myssql_insstalll_ddb脚本本)。授授权表共共有5个个表:uuserr、dbb、hoost、tabbless_prriv和和collumnns_pprivv。7.1.1.11授权表表useer、ddb和hhostt的结构构和作用用表7-11 授授权表uuserr、dbb和hoost的的结构Userr表Db表Hostt表作用域列列HosttHosttHosttDbDbUserrUserrPasssworrd数据库/表的权权限列Alteer_pprivvAlteer_pprivvAlteer_pprivvCreaate_priivCreaate_priivDeleete_priivDeleete_priivDropp_prrivDropp_prrivIndeex_pprivvIndeex_pprivvIndeex_pprivvInseert_priivInseert_priivRefeerenncess_prrivRefeerenncess_prrivSeleect_priivSeleect_priivUpdaate_priivUpdaate_priivUpdaate_priivAlteer_pprivvAlteer_pprivvAlteer_pprivvFilee_prrivGrannt_pprivvGrannt_pprivvGrannt_pprivvProccesss_prrivRelooad_priivShuttdowwn_pprivv授权表的的内容有有如下用用途:l userr表userr表列出出可以连连接服务务器的用用户及其其口令,并并且它指指定他们们有哪种种全局(超超级用户户)权限限。在uuserr表启用用的任何何权限均均是全局局权限,并并适用于于所有数数据库。例如,如如果你启启用了DDELEETE权权限,在在这里列列出的用用户可以以从任何何表中删删除记录录,所以以在你这这样做之之前要认认真考虑虑。 l db表db表列列出数据据库,而而用户有有权限访访问它们们。在这这里指定定的权限限适用于于一个数数据库中中的所有有表。 l hostt表hostt表与ddb表结结合使用用在一个个较好层层次上控控制特定定主机对对数据库库的访问问权限,这这可能比比单独使使用dbb好些。这个表表不受GGRANNT和RREVOOKE语语句的影影响,所所以,你你可能发发觉你根根本不是是用它。7.1.1.22授权表表tabbless_prriv和和collumnns_pprivv的结构构和作用用表7-22 授授权表ttablles_priiv和ccoluumnss_prriv的的结构授权表ttablles_priiv授权表ccoluumnss_prriv作用域列列HosttHosttDbDbUserrUserrTablle_nnameeTablle_nnameeColuumn_namme权限列Tablle_pprivvColuumn_priiv其他列TimeestaampTimeestaampGranntorrMySQQL没有有rowws_pprivv表,因因为它不不提供记记录级权权限,例例如,你你不能限限制用户户于表中中包含特特定列值值的行。如果你你确实需需要这种种能力,你你必须用用应用编编程来提提供。如如果你想想执行建建议的记记录级锁锁定,你你可用GGET_LOCCK()函数做做到。授权表的的内容有有如下用用途:l tablles_priiv表tablles_priiv表指指定表级级权限,在在这里指指定的一一个权限限适用于于一个表表的所有有列。 l coluumnss_prriv表表coluumnss_prriv表表指定列列级权限限。这里里指定的的权限适适用于一一个表的的特定列列。 tablles_priiv和ccoluumnss_prriv表表在MyySQLL 3.22.11版版引进(与与GRAANT语语句同时时)。如如果你有有较早版版本的MMySQQL,你你的myysqll数据库库将只有有useer、ddb和hhostt表。如如果你从从老版本本升级到到3.222.111或更更新,而而没有ttablles_priiv和ccoluumnss_prriv表表,运行行myssql_fixx_prriviilegges_tabbless脚本创创建它们们。7.1.2用户户的权限限权限信息息用usser、db、hosst、ttablles_priiv和ccoluumnss_prriv表表被存储储在myysqll数据库库中(即即在名为为myssql的的数据库库中)。在MyySQLL启动时时和在77.5权权限修改改何时生生效所说说的情况况时,服服务器读读入这些些数据库库表内容容。7.1.2.11数据库库和表的的权限下列权限限运用于于数据库库和表上上的操作作。l SELEECT允许你使使用SEELECCT语句句从表中中检索数数据。SSELEECT语语句只有有在他们们真正从从一个表表中检索索行是才才需要sseleect权权限,你你可以执执行某个个SELLECTT语句,甚甚至没有有任何到到服务器器上的数数据库里里的存取取任何东东西的许许可。例例如,你你可使用用myssql客客户作为为一个简简单的计计算器: mysqql> SELLECTT 1+1;mysqql> SELLECTT PII()*2;l UPDAATE 允许你修修改表中中的已有有的记录录。 l INSEERT允许在表表中插入入记录l DELEETE允许你从从表中删删除现有有记录。 l ALTEER允许你使使用ALLTERR TAABLEE语句,这这其实是是一个简简单的第第一级权权限,你你必须由由其他权权限,这这看你想想对数据据库实施施什么操操作。 l CREAATE允许你创创建数据据库和表表,但不不允许创创建索引引。 l DROPP允许你删删除(抛抛弃)数数据库和和表,但但不允许许删除索索引。 注意:如如果你将将myssql数数据库的的droop权限限授予一一个用户户,该用用户能抛抛弃存储储了MyySQLL存取权权限的数数据库! l INDEEX允许你创创建并删删除索引引。 l REFEERENNCESS目前不用用。7.1.2.22管理权权限下列权限限运用于于控制服服务器或或用户授授权能力力的操作作的管理理性操作作。l FILEE允许你告告诉服务务器读或或写服务务器主机机上的文文件。该该权限不不应该随随便授予予,它很很危险,见见“回避授授权表风风险”。服务务器确实实较谨慎慎地保持持在一定定范围内内使用该该权限。你只能能读任何何人都能能读的文文件。你你正在写写的文件件必须不不是现存存的文件件,这防防止你迫迫使服务务器重写写重要文文件,如如/ettc/ppassswd或或属于别别人的数数据库的的数据目目录。如果你授授权FIILE权权限,确确保你不不以UNNIX的的rooot用户户运行服服务器,因因为rooot可可在文件件系统的的任何地地方创建建新文件件。如果果你以一一个非特特权用户户运行服服务器,服服务器只只能在给给用户能能访问的的目录中中创建文文件。l GRANNT允许你将将你自己己的权限限授予别别人,包包括GRRANTT。 l PROCCESSS允许你通通过使用用SHOOW PPROCCESSS语句或或myssqlaadmiin pproccesss命令查查看服务务器内正正在运行行的线程程(进程程)的信信息。这这个权限限也允许许你用KKILLL语句或或myssqlaadmiin kkilll命令杀杀死线程程。你总是能能看到或或杀死你你自己的的线程。PROOCESSS权限限赋予你你对任何何线程做做这些事事情的能能力。l RELOOAD允许你执执行大量量的服务务器管理理操作。你可以以发出FFLUSSH语句句,你也也能指性性myssqlaadmiin的rrelooad、reffressh、fflussh-hhostts、fflussh-llogss、fllushh-prriviilegges和和fluush-tabbless等命令令。 l SHUTTDOWWN允许你用用myssqlaadmiin sshuttdowwn关闭闭服务器器。 在useer、ddb和hhostt表中,每每一个权权限以一一个单独独的列指指定。这这些列全全部声明明为一个个ENUUM(""N","Y"")类型型,所以以每个权权的缺省省值是“N”。在ttablles_priiv和ccoluumnss_prriv中中的权限限以一个个SETT表示,它它允许权权限用一一个单个个列以任任何组合合指定。这两个个表比其其他三个个表更新新,这就就是为什什么它们们使用更更有效的的表示方方式的原原因。(有有可能在在未来,uuserr、dbb和hoost表表也用一一个SEET类型型表示。)7.1.3授权权表列的的内容7.1.3.11作用域域列内容容一些范围围列要求求文字值值,但它它们大多多数允许许通配符符或其他他特殊值值。表7-33 作作用域列列的类型型字段名类型HosttCHARR(600)UserrCHARR(166)PasssworrdCHARR(166)DbCHARR(644) (ttablles_priiv和ccoluumnss_prriv表表为CHHAR(60)l Hostt 一个Hoost列列值可以以是一个个主机名名或一个个IP地地址。值值loccalhhostt意味着着本地主主机,但但它只在在你用一一个loocallhosst主机机名时才才匹配,而而不是你你在使用用主机名名时。假假如你的的本地主主机名是是pitt.snnakee.neet并且且在usser表表中有对对你的两两条记录录,一个个有一个个Hosst值或或loccalhhostt,而另另一个有有pitt.snnakee.neet,有有loccalhhostt的记录录将只当当你连接接loccalhhostt时匹配配,其他他在只在在连接t时才匹匹配。如如果你想想让客户户能以两两种方式式连接,你你需要在在useer表中中有两条条记录。你也可以以用通配配符指定定Hosst值。可以使使用SQQL的模模式字符符“%”和“_”并具有有当你在在一个查查询中使使用LIIKE算算符同样样的含义义(不允允许reegexx算符)。 SQQL模式式字符都都能用于于主机名名和IPP地址。如%wwiscc.eddu匹配配任何wwiscc.eddu域内内的主机机,而%.eddu匹配配任何教教育学院院的主机机。类似似地,1192.1688.%匹匹配任何何在1992.1168 B类子子网的主主机,而而1922.1668.33.%匹匹配任何何在1992.1168.3 CC类子网网的主机机。%值匹配配所有主主机,并并可用于于允许一一个用户户从任何何地方连连接。一一个空白白的Hoost值值等同于于%。(例例外:在在db表表中,一一个空白白Hosst值含含义是“进一步步检查hhostt表”,该过过程在“查询访访问验证证”中介绍绍。)从MySSQL 3.223起,你你也可以以指定带带一个表表明那些些为用于于网络地地址的网网络掩码码的IPP地址,如如1922.1668.1128.0/117指定定一个117位网网络地址址并匹配配其IPP地址是是1922.1668.1128前前17位位的任何何主机。l Userr 用户名必必须是文文字的或或空白。一个空空白值匹匹配任何何用户。%作为为一个UUserr值不意意味着空空白,相相反它匹匹配一个个字面上上的%名名字,这这可能不不是你想想要的。当一个到到来的连连接通过过useer表被被验证而而匹配的的记录包包含一个个空白的的Useer值,客客户被认认为是一一个匿名名用户。 l Passsworrd 口令值可可以是空空或非空空,不允允许用通通配符。一个空空口令不不意味着着匹配任任何口令令,它意意味着用用户必须须不指定定口令。口令以一一个加密密过的值值存储,不不是一个个字面上上的文本本。如果果你在PPasssworrd列中中存储一一个照字字面上的的口令,用用户将不不能连接接!GRRANTT语句和和myssqlaadmiin ppasssworrd命令令为你自自动加密密口令,但但是如果果你用诸诸如INNSERRT、RREPLLACEE、UPPDATTE或SSET PASSSWOORD等等命令,一一定要用用PASSSWOORD("neew_ppasssworrd")而不是是简单的的"neew_ppasssworrd"来来指定口口令。 l Db在collumnns_pprivv和taablees_pprivv表中,DDb值必必须是真真正的数数据库名名(照字字面上),不不允许模模式和空空白。在在db和和hosst中,DDb值可可以以字字面意义义指定或或使用SSQL模模式字符符'%''或'_'指定定一个通通配符。一个''%'或或空白匹匹配任何何数据库库。 l Tablle_nnamee,Coolummn_nnamee这些列中中的值必必须是照照字面意意思的表表或列名名,不允允许模式式和空白白。某些范围围列被服服务器视视为大小小写敏感感的,其其余不是是。这些些原则总总结在下下表中。特别注注意Taablee_naame值值总是被被看作大大小写敏敏感的,即即使在查查询中的的表名的的大小写写敏感性性对待视视服务器器运行的的主机的的文件系系统而定定(UNNIX下下是大小小写敏感感,而WWinddowss不是)。某些作用用域列被被服务器器视为大大小写敏敏感的,其其余不是是。这些些原则总总结在下下表中。特别注注意Taablee_naame值值总是被被看作大大小写敏敏感的,即即使在查查询中的的表名的的大小写写敏感性性对待视视服务器器运行的的主机的的文件系系统而定定(UNNIX下下是大小小写敏感感,而WWinddowss不是)。表7-44 作作用域列列的大小小写敏感感性列大小写敏敏感性HosttNoUserrYesPasssworrdYesDbYesTablle_nnameeYesColuumn_nammeNo7.1.3.22授权表表Useer、DDb和HHostt的权限限列的内内容在useer、ddb和hhostt表中,所所有权限限字段被被声明为为ENUUM(''N','Y'')-每一个个都可有有值'NN'或''Y',并并且缺省省值是''N'.7.1.3.33授权表表tabbless_prriv和和collumnns_pprivv的权限限列的内内容在tabbless_prriv和和collumnns_pprivv表中,权权限字段段被声明明为SEET字段段:表7-55 授授权表ttablles_priiv和ccoluumnss_prriv的的权限列列的类型型表名字段名可能的集集合成员员tablles_priivTablle_pprivv'Sellectt', 'Innserrt', 'UUpdaate'', ''Delletee', 'Crreatte', 'DDropp', 'Grrantt', 'Reeferrencces'', ''Inddex'', ''Altter''tablles_priivColuumn_priiv'Sellectt', 'Innserrt', 'UUpdaate'', ''Reffereencees'coluumnss_prrivColuumn_priiv'Sellectt', 'Innserrt', 'UUpdaate'', ''Reffereencees'7.1.4权限限系统工工作原理理7.1.4.11权限系系统工作作的一般般过程MySQQL权限限系统保保证所有有的用户户可以严严格地做做他们假假定被允允许做的的事情。当你连连接一个个MySSQL服服务器时时, 你你的身份份由你从从那连接接的主机机和你指指定的用用户名来来决定,系系统根据据你的身身份和你你想做什什么来授授予权限限。 MySQQL在认认定身份份中考虑虑你的主主机名和和用户名名字,是是因为有有很小的的原因假假定一个个给定的的用户在在因特网网上属于于同一个个人。例例如,用用户从wwhittehoousee.goov连接接的biill不不必和从从mossoftt.coom连接接billl是同同一个人人。 MMySQQL通过过允许你你区分在在不同的的主机上上碰巧有有同样名名字用户户来处理理它:你你可以对对从whhiteehouuse.govv连接授授与biill一一个权限限集,而而为从m的连接接授予一一个不同同的权限限集。 MySQQL存取取控制包包含2个个阶段: l 阶段1:服务器器检查你你是否允允许连接接。 l 阶段2:假定你你能连接接,服务务器检查查你发出出的每个个请求。看你是是否有足足够的权权限实施施它。例例如,如如果你从从数据库库中一个个表精选选(seelecct)行行或从数数据库抛抛弃一个个表,服服务器确确定你对对表有sseleect权权限或对对数据库库有drrop权权限。 服务器在在存取控控制的两两个阶段段使用在在myssql的的数据库库中的uuserr、dbb和hoost表表对存取控控制的第第二阶段段(请求求证实),如果果请求涉涉及表,服服务器可可以另外外参考ttablles_priiv和ccoluumnss_prriv表表。简单地说说,服务务器使用用这样的的授权表表: l userr表范围围字段决决定是否否允许或或拒绝到到来的连连接。对对于允许许的连接接,权限限字段指指出用户户的全局局(超级级用户)权限。 l db和hhostt表一起起使用: db表范范围字段段决定用用户能从从哪个主主机存取取哪个数数据库。权限字字段决定定允许哪哪个操作作。 当你想要要一个给给定的ddb条目目应用于于若干主主机时,hhostt表作为为db表表的扩展展被使用用。例如如,如果果你想要要一个用用户能在在你的网网络从若若干主机机使用一一个数据据库,在在用户的的db表表的Hoost条条目设为为空值,然然后将那那些主机机的每一一个移入入hosst表。这个机机制详细细描述在在7.11.4.3 存存取控制制, 阶阶段2:请求证证实。 tablles_priiv和ccoluumnss_prriv表表类似于于db表表,但是是更精致致:他们们在表和和列级应应用而非非在数据据库级。 注意管理理权限(relloadd, sshuttdowwn, 等等)仅在uuserr表中被被指定。这是因因为管理理性操作作是服务务器本身身的操作作并且不不是特定定数据库库,因此此没有理理由在其其他授权权表中列列出这样样的权限限。事实实上,只只需要请请教usser表表来决定定你是否否执行一一个管理理操作。 filee权限也也仅在uuserr表中指指定。它它不是管管理性权权限,但但你读或或谢在服服务器主主机上的的文件的的的能力力独立于于你正在在存取的的数据库库。 当myssqldd服务器器启动时时,读取取一次授授权表内内容。对对授权表表的更改改生效在在7.55权限修修改何时时生效。一个有用用的诊断断工具是是myssqlaacceess脚脚本,由由Carrlieer YYvess 提供供给MyySQLL分发。使用-heelp选选项调用用myssqlaacceess查查明它怎怎样工作作。注意意:myysqllacccesss仅用uuserr、dbb和hoost表表仅检查查存取。它不检检查表或或列级权权限。7.1.4.22存取控控制, 阶段11:连接接证实当你试图图联接一一个MyySQLL服务器器时,服服务器基基于你的的身份和和你是否否能通过过供应正正确的口口令验证证身份来来接受或或拒绝连连接。如如果不是是,服务务器完全全具结你你的存取取,否则则,服务务器接受受连接,然然后进入入阶段22并且等等待请求求。 你的身份份基于22个信息息: l 你从那个个主机连连接 l 你的MyySQLL用户名名 身份检查查使用33个usser表表(Hoost, Usser和和Passswoord)范围字字段执行行。服务务器只有有在一个个useer表条条目匹配配你的主主机名和和用户名名并且你你提供了了正确的的口令时时才接受受连接。 在useer表范范围字段段可以如如下被指指定: 一个Hoost值值可以是是主机名名或一个个IP数数字,或或'loocallhosst'指指出本地地主机。 你可以在在Hosst字段段里使用用通配符符字符“%”和“_”。 一个Hoost值值'%''匹配任任何主机机名,一一个空白白Hosst值等等价于''%'。注意这这些值匹匹配能创创建一个个连接到到你的服服务器的的任何主主机! 通配符字字符在UUserr字段中中不允许许,但是是你能指指定空白白的值,它它匹配任任何名字字。如果果useer表匹匹配到来来的连接接的条目目有一个个空白的的用户名名,用户户被认为为是匿名名用户(没有名名字的用用户),而而非客户户实际指指定的名名字。这这意味着着一个空空白的用用户名被被用于在在连接期期间的进进一步的的存取检检查(即即,在阶阶段2期期间)。 Passsworrd字段段可以是是空白的的。这不不意味着着匹配任任何口令令,它意意味着用用户必须须不指定定一个口口令进行行连接。 非空白PPasssworrd值代代表加密密的口令令。 MMySQQL不以以任何人人可以看看的纯文文本格式式存储口口令,相相反,正正在试图图联接的的一个用用户提供供的口令令被加密密(使用用PASSSWOORD()函数数),并并且与存存储了uuserr表中的的已经加加密的版版本比较较。如果果他们匹匹配,口口令是正正确的。 下面的例例子显示示出各种种useer表中中Hosst和UUserr条目的的值的组组合如何何应用于于到来的的连接:表7-66 HHostt和Usser条条目的值值的组合合Hostt值Userr值被条目匹匹配的连连接''''Gween'Gwenn, 从从连连接'''''任何用户户, 从从连连接,'%''Gween'Gwenn, 从从任何主主机连接接'%'''任何用户户, 从从任何主主机连接接'%.lloc.govv''Gween'Gwenn, 从从在looc.ggov域域的任何何主机连连接'x.yy.%'''Gween'Gwenn, 从从x.yy.neet、m,x.y.eedu等等联接。(这或或许无用用)'1444.1555.1166.1777''Gween'Gwenn, 从从有1444.1155.1666.1777 IIP 地地址的主主机连接接'1444.1555.1166.%''Gween'Gwenn, 从从1444.1555.1166 C类子子网的任任何主机机连接既然你能能在Hoost字字段使用用IP通通配符值值(例如如,'1144.1555.1666.%'匹配配在一个个子网上上的每台台主机),有可可能某人人可能企企图探究究这种能能力,通通过命名名一台主主机为m。为了了阻止这这样的企企图,MMySQQL不允允许匹配配以数字字和一个个点起始始的主机机名,这这样,如如果你用用一个命命名为类类似m的主机机,它的的名字决决不会匹匹配授权权表中HHostt列。只只有一个个IP数数字能匹匹配IPP通配符符值。 一个到来来的连接接可以被被在usser表表中的超超过一个个条目匹匹配。例例如,一一个由GGwenn从n的连接接匹配多多个条目目如上所所述。如如果超过过一个匹匹配,服服务器怎怎么选择择使用哪哪个条目目呢?服服务器在在启动时时读入uuserr表后通通过排序序来解决决这个问问题,然然后当一一个用户户试图连连接时,以以排序的的顺序浏浏览条目目,第一一个匹配配的条目目被使用用。 MySQQL服务务器按一一种特定定方式排排序符授授权表中中的记录录,然后后通过按按序浏览览记录匹匹配到来来的连接接。找到到的第一一个匹配配决定了了被使用用的记录录。理解解MySSQL使使用的排排序顺序序很重要要,特别别是对uuserr表。当服务器器读取uuserr表内容容时,它它根据在在Hosst和UUserr列中的的值排序序记录,HHostt值起决决定作用用(相同同的Hoost值值排在一一起,然然后再根根据Usser值值排序)。然而,排排序不是是典序(按按词排序序),它它只是部部分是。要牢记记的是字字面上的的词优先先于模式式。这意意味着如如果你正正从clliennt.yyourr.neet连接接服务器器而Hoost有有t和%.youur.nnet两两个值,则则第一个个先选。类似地地,%.youur.nnet优优先于%.neet,然然后是%。IPP地址的的匹配也也是这样样的。总之一句句话,越越具体越越优先。userr表排序序工作如如下,假假定usser表表看起来来像这样样: +-+-+-| Hoost | Usser | .+-+-+-| % | rooot | .| % | jeerryy | .| loocallhosst | rooot | .| loocallhosst | | .+-+-+-当服务器器在表中中读取时时,它以以最特定定的Hoost值值为先的的次序排排列(''%'在在Hosst列里里意味着着“任何主主机”并且是是最不特特定的)。有相相同Hoost值值的条目目以最特特定的UUserr值为先先的次序序排列(一个空空白Usser值值意味着着“任何用用户”并且是是最不特特定的)。最终终排序的的useer表看看起来像像这样: +-+-+-| Hoost | Usser | .+-+-+-| loocallhosst | rooot | .| loocallhosst | | .| % | jeerryy | .| % | rooot | .+-+-+-当一个连连接被尝尝试时,服服务器浏浏览排序序的条目目并使用用找到的的第一个个匹配。对于由由jefffreey从llocaalhoost的的一个连连接,在在Hosst列的的'loocallhosst'条条目首先先匹配。那些有有空白用用户名的的条目匹匹配连接接的主机机名和用用户名。('%'/''jefffreey'条条目也将将匹配,但但是它不不是在表表中的第第一匹配配。)这是另外外一个例例子。假假定usser表表看起来来像这样样: +-+-+-| Hoost | Useer | .+-+-+-| % | jerrry | .| n| | .+-+-+-排序后的的表看起起来像这这样: +-+-+-| Hoost | Useer | .+-+-+-| n| | .| % | jerrry | .+-+-+-一个由jjerrry从hhostt.doomaiin.ccn的连连接被第第一个条条目匹配配,而一一个由jjerrry从wwhittehoousee.goov的连连接被第第二个匹匹配。 普遍的误误解是认认为,对对一个给给定的用用户名,当当服务器器试图对对连接寻寻找匹配配时,明明确命名名那个用用户的所所有条目目将首先先被使用用。这明明显不是是事实。先前的的例子说说明了这这点,在在那里一一个由jjerrry从hhostt.doomaiin.ccn的连连接没被被包含''jerrry''作为UUserr字段值值的条目目匹配,但但是由没没有用户户名的题题目匹配配! 如果你有有服务器器连接的的问题,打打印出uuserr表并且且手工排排序它看看看第一一个匹配配在哪儿儿进行。7.1.4.33存取控控制,阶阶段2:请求证证实一旦你建建立了一一个连接接,服务务器进入入阶段22。对在在此连接接上进来来的每个个请求,服服务器检检查你是是否有足足够的权权限来执执行它,它它基于你你希望执执行的操操作类型型。这正正是在授授权表中中的权限限字段发发挥作用用的地方方。这些些权限可可以来子子useer、ddb、hhostt、taablees_pprivv或coolummns_priiv表的的任何一一个。授授权表用用GRAANT和和REVVOKEE命令操操作。(你你可以发发觉参考考第七章章 权限限系统怎怎样工作作很有帮帮助,它它列出了了在每个个权限表表中呈现现的字段段。)userr表在一一个全局局基础上上授予赋赋予你的的权限,该该权限不不管当前前的数据据库是什什么均适适用。例例如,如如果usser表表授予你你delletee权限, 你可以以删除在在服务器器主机上上从任何何数据库库删除行行!换句句话说,uuserr表权