《MySQL金典培训教程:10第七章6782.docx》由会员分享,可在线阅读,更多相关《MySQL金典培训教程:10第七章6782.docx(68页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第7章数据库安全本章要点:v MySQLL权限系系统原理理v 如何授予撤撤销用户户和授权权v 如何直接修修改授权权表v 授予用户权权限的规规范和注注意事项项作为一个MMySQQL的系系统管理理员,你你有责任任维护你你的MyySQLL数据库库系统的的数据安安全性和和完整性性。本文文主要主主要介绍绍如何建建立一个个安全的的MySSQL系系统,从从系统内内部和外外部网络络两个角角度,为为你提供供一个指指南。本章主要考考虑下列列安全性性有关的的问题:l 为什么安全全性很重重要,你你应该防防范那些些攻击? l 服务器面临临的风险险(内部部安全性性),如如何处理理? l 连接服务器器的客户户端风险险(外部
2、部安全性性),如如何处理理? MySQLL管理员员有责任任保证数数据库内内容的安安全性,使使得这些些数据记记录只能能被那些些正确授授权的用用户访问问,这涉涉及到数数据库系系统的内内部安全全性和外外部安全全性。内部安全性性关心的的是文件件系统级级的问题题,即,防防止MyySQLL数据目目录(DDATAADIRR)被在在服务器器主机有有账号的的人(合合法或窃窃取的)进进行攻击击。如果果数据目目录内容容的权限限过分授授予,使使得每个个人均能能简单地地替代对对应于那那些数据据库表的的文件,那那么确保保控制客客户通过过网络访访问的授授权表设设置正确确,对此此毫无意意义。外部安全性性关心的的是从外外部通过
3、过网络连连接服务务器的客客户的问问题,即即,保护护MySSQL服服务器免免受来自自通过网网络对服服务器的的连接的的攻击。你你必须设设置MyySQLL授权表表(grrantt taablee),使使得他们们不允许许访问服服务器管管理的数数据库内内容,除除非提供供有效的的用户名名和口令令。下面就详细细介绍如如何设置置文件系系统和授授权表mmysqql,实实现MyySQLL的两级级安全性性。7.1 MMySQQL的权权限系统统MySQLL有一套套先进的的但非标标准的安安全/授授权系统统,掌握握其授权权机制是是开始操操作MyySQLL数据库库必须要要走的第第一步,对对于一个个熟悉SSQL基基本操作作的
4、人来来说,也也是MyySQLL所有的的知识中中比较难难以理解解的一个个部分。本本节通过过揭开其其授权系系统的运运作机制制,希望望大家能能够可以以更好地地操作和和使用这这个优秀秀的数据据库系统统。 MySQLL的安全全系统是是很灵活活的,它它允许你你以多种种不同方方式设置置用户权权限。一一般地,你你可使用用标准的的SQLL语句GGRANNT和RREVOOKE语语句做,他他们为你你修改控控制客户户访问的的授权表表,然而而,你可可能由一一个不支支持这些些语句的的老版本本的MyySQLL(在33.222.111之前这这些语句句不起作作用),或或者你发发觉用户户权限看看起来不不是以你你想要的的方式工工作
5、。对对于这种种情况,了了解MyySQLL授权表表的结构构和服务务器如何何利用它它们决定定访问权权限是有有帮助的的,这样样的了解解允许你你通过直直接修改改授权表表增加、删删除或修修改用户户权限,它它也允许许你在检检查这些些表时诊诊断权限限问题。7.1.11授权表表的结构构通过网络连连接服务务器的客客户对MMySQQL数据据库的访访问由授授权表内内容来控控制。这这些表位位于myysqll数据库库中,并并在第一一次安装装MySSQL的的过程中中初始化化(运行行myssql_insstalll_ddb脚本本)。授授权表共共有5个个表:uuserr、dbb、hoost、ttablles_priiv和cc
6、oluumnss_prriv。7.1.11.1授授权表uuserr、dbb和hoost的的结构和和作用表7-1 授权权表usser、ddb和hhostt的结构构User表表Db表Host表表作用域列HostHostHostDbDbUserUserPasswwordd数据库/表表的权限限列Alterr_prrivAlterr_prrivAlterr_prrivCreatte_pprivvCreatte_pprivvDelette_pprivvDelette_pprivvDrop_priivDrop_priivIndexx_prrivIndexx_prrivIndexx_prrivInserrt_
7、pprivvInserrt_pprivvReferrencces_priivReferrencces_priivSelecct_pprivvSelecct_pprivvUpdatte_pprivvUpdatte_pprivvUpdatte_pprivvAlterr_prrivAlterr_prrivAlterr_prrivFile_priivGrantt_prrivGrantt_prrivGrantt_prrivProceess_priivReloaad_pprivvShutddownn_prriv授权表的内内容有如如下用途途:l user表表user表表列出可可以连接接服务器器的用户户及其口
8、口令,并并且它指指定他们们有哪种种全局(超超级用户户)权限限。在uuserr表启用用的任何何权限均均是全局局权限,并并适用于于所有数数据库。例例如,如如果你启启用了DDELEETE权权限,在在这里列列出的用用户可以以从任何何表中删删除记录录,所以以在你这这样做之之前要认认真考虑虑。 l db表db表列出出数据库库,而用用户有权权限访问问它们。在在这里指指定的权权限适用用于一个个数据库库中的所所有表。 l host表表host表表与dbb表结合合使用在在一个较较好层次次上控制制特定主主机对数数据库的的访问权权限,这这可能比比单独使使用dbb好些。这这个表不不受GRRANTT和REEVOKKE语句
9、句的影响响,所以以,你可可能发觉觉你根本本不是用用它。7.1.11.2授授权表ttablles_priiv和ccoluumnss_prriv的的结构和和作用表7-2 授权权表taablees_pprivv和coolummns_priiv的结结构授权表taablees_pprivv授权表coolummns_priiv作用域列HostHostDbDbUserUserTablee_naameTablee_naameColummn_nnamee权限列Tablee_prrivColummn_pprivv其他列TimesstammpTimesstammpGranttorMySQLL没有rrowss_prr
10、iv表表,因为为它不提提供记录录级权限限,例如如,你不不能限制制用户于于表中包包含特定定列值的的行。如如果你确确实需要要这种能能力,你你必须用用应用编编程来提提供。如如果你想想执行建建议的记记录级锁锁定,你你可用GGET_LOCCK()函数做做到。授权表的内内容有如如下用途途:l tablees_pprivv表tablees_pprivv表指定定表级权权限,在在这里指指定的一一个权限限适用于于一个表表的所有有列。 l colummns_priiv表colummns_priiv表指指定列级级权限。这这里指定定的权限限适用于于一个表表的特定定列。 tablees_pprivv和coolummns_
11、priiv表在在MySSQL 3.222.111版引引进(与与GRAANT语语句同时时)。如如果你有有较早版版本的MMySQQL,你你的myysqll数据库库将只有有useer、ddb和hhostt表。如如果你从从老版本本升级到到3.222.111或更更新,而而没有ttablles_priiv和ccoluumnss_prriv表表,运行行myssql_fixx_prriviilegges_tabbless脚本创创建它们们。7.1.22用户的的权限权限信息用用useer、ddb、hhostt、taablees_pprivv和coolummns_priiv表被被存储在在myssql数数据库中中(即
12、在在名为mmysqql的数数据库中中)。在在MySSQL启启动时和和在7.5权限限修改何何时生效效所说的的情况时时,服务务器读入入这些数数据库表表内容。7.1.22.1数数据库和和表的权权限下列权限运运用于数数据库和和表上的的操作。l SELECCT允许你使用用SELLECTT语句从从表中检检索数据据。SEELECCT语句句只有在在他们真真正从一一个表中中检索行行是才需需要seelecct权限限,你可可以执行行某个SSELEECT语语句,甚甚至没有有任何到到服务器器上的数数据库里里的存取取任何东东西的许许可。例例如,你你可使用用myssql客客户作为为一个简简单的计计算器: mysqll SS
13、ELEECT 1+11;mysqll SSELEECT PI()*22;l UPDATTE 允许你修改改表中的的已有的的记录。 l INSERRT允许在表中中插入记记录l DELETTE允许你从表表中删除除现有记记录。 l ALTERR允许你使用用ALTTER TABBLE语语句,这这其实是是一个简简单的第第一级权权限,你你必须由由其他权权限,这这看你想想对数据据库实施施什么操操作。 l CREATTE允许你创建建数据库库和表,但但不允许许创建索索引。 l DROP允许你删除除(抛弃弃)数据据库和表表,但不不允许删删除索引引。 注意:如果果你将mmysqql数据据库的ddropp权限授授予一个
14、个用户,该该用户能能抛弃存存储了MMySQQL存取取权限的的数据库库! l INDEXX允许你创建建并删除除索引。 l REFERRENCCES目前不用。7.1.22.2管管理权限限下列权限运运用于控控制服务务器或用用户授权权能力的的操作的的管理性性操作。l FILE允许你告诉诉服务器器读或写写服务器器主机上上的文件件。该权权限不应应该随便便授予,它它很危险险,见“回避授授权表风风险”。服务务器确实实较谨慎慎地保持持在一定定范围内内使用该该权限。你你只能读读任何人人都能读读的文件件。你正正在写的的文件必必须不是是现存的的文件,这这防止你你迫使服服务器重重写重要要文件,如如/ettc/ppass
15、swd或或属于别别人的数数据库的的数据目目录。如果你授权权FILLE权限限,确保保你不以以UNIIX的rroott用户运运行服务务器,因因为rooot可可在文件件系统的的任何地地方创建建新文件件。如果果你以一一个非特特权用户户运行服服务器,服服务器只只能在给给用户能能访问的的目录中中创建文文件。l GRANTT允许你将你你自己的的权限授授予别人人,包括括GRAANT。 l PROCEESS允许你通过过使用SSHOWW PRROCEESS语语句或mmysqqladdminn prroceess命命令查看看服务器器内正在在运行的的线程(进进程)的的信息。这这个权限限也允许许你用KKILLL语句或或
16、myssqlaadmiin kkilll命令杀杀死线程程。你总是能看看到或杀杀死你自自己的线线程。PPROCCESSS权限赋赋予你对对任何线线程做这这些事情情的能力力。l RELOAAD允许你执行行大量的的服务器器管理操操作。你你可以发发出FLLUSHH语句,你你也能指指性myysqlladmmin的的relloadd、reefreesh、fflussh-hhostts、fflussh-llogss、fllushh-prriviilegges和和fluush-tabbless等命令令。 l SHUTDDOWNN允许你用mmysqqladdminn shhutddownn关闭服服务器。 在use
17、rr、dbb和hoost表表中,每每一个权权限以一一个单独独的列指指定。这这些列全全部声明明为一个个ENUUM(N,Y)类型型,所以以每个权权的缺省省值是“N”。在ttablles_priiv和ccoluumnss_prriv中中的权限限以一个个SETT表示,它它允许权权限用一一个单个个列以任任何组合合指定。这这两个表表比其他他三个表表更新,这这就是为为什么它它们使用用更有效效的表示示方式的的原因。(有有可能在在未来,uuserr、dbb和hoost表表也用一一个SEET类型型表示。)7.1.33授权表表列的内内容7.1.33.1作作用域列列内容一些范围列列要求文文字值,但但它们大大多数允允许
18、通配配符或其其他特殊殊值。表7-3 作用用域列的的类型字段名类型HostCHAR(60)UserCHAR(16)PasswworddCHAR(16)DbCHAR(64) (ttablles_priiv和ccoluumnss_prriv表表为CHHAR(60)l Host 一个Hosst列值值可以是是一个主主机名或或一个IIP地址址。值llocaalhoost意意味着本本地主机机,但它它只在你你用一个个loccalhhostt主机名名时才匹匹配,而而不是你你在使用用主机名名时。假假如你的的本地主主机名是是pitt.snnakee.neet并且且在usser表表中有对对你的两两条记录录,一个个有一
19、个个Hosst值或或loccalhhostt,而另另一个有有pitt.snnakee.neet,有有loccalhhostt的记录录将只当当你连接接loccalhhostt时匹配配,其他他在只在在连接t时才匹匹配。如如果你想想让客户户能以两两种方式式连接,你你需要在在useer表中中有两条条记录。你也可以用用通配符符指定HHostt值。可可以使用用SQLL的模式式字符“%”和“_”并具有有当你在在一个查查询中使使用LIIKE算算符同样样的含义义(不允允许reegexx算符)。 SQLL模式字字符都能能用于主主机名和和IP地地址。如如%wiisc.eduu匹配任任何wiisc.eduu域内的的主
20、机,而而%.eedu匹匹配任何何教育学学院的主主机。类类似地,1192.1688.%匹匹配任何何在1992.1168 B类子子网的主主机,而而1922.1668.33.%匹匹配任何何在1992.1168.3 CC类子网网的主机机。%值匹配所所有主机机,并可可用于允允许一个个用户从从任何地地方连接接。一个个空白的的Hosst值等等同于%。(例例外:在在db表表中,一一个空白白Hosst值含含义是“进一步步检查hhostt表”,该过过程在“查询访访问验证证”中介绍绍。)从MySQQL 33.233起,你你也可以以指定带带一个表表明那些些为用于于网络地地址的网网络掩码码的IPP地址,如如1922.1
21、668.1128.0/117指定定一个117位网网络地址址并匹配配其IPP地址是是1922.1668.1128前前17位位的任何何主机。l User 用户名必须须是文字字的或空空白。一一个空白白值匹配配任何用用户。%作为一一个Usser值值不意味味着空白白,相反反它匹配配一个字字面上的的%名字字,这可可能不是是你想要要的。当一个到来来的连接接通过uuserr表被验验证而匹匹配的记记录包含含一个空空白的UUserr值,客客户被认认为是一一个匿名名用户。 l Passwwordd 口令值可以以是空或或非空,不不允许用用通配符符。一个个空口令令不意味味着匹配配任何口口令,它它意味着着用户必必须不指指
22、定口令令。口令以一个个加密过过的值存存储,不不是一个个字面上上的文本本。如果果你在PPasssworrd列中中存储一一个照字字面上的的口令,用用户将不不能连接接!GRRANTT语句和和myssqlaadmiin ppasssworrd命令令为你自自动加密密口令,但但是如果果你用诸诸如INNSERRT、RREPLLACEE、UPPDATTE或SSET PASSSWOORD等等命令,一一定要用用PASSSWOORD(neew_ppasssworrd)而不是是简单的的neew_ppasssworrd来来指定口口令。 l Db在coluumnss_prriv和和tabbless_prriv表表中,DD
23、b值必必须是真真正的数数据库名名(照字字面上),不不允许模模式和空空白。在在db和和hosst中,DDb值可可以以字字面意义义指定或或使用SSQL模模式字符符%或_指定定一个通通配符。一一个%或空空白匹配配任何数数据库。 l Tablee_naame,CColuumn_namme这些列中的的值必须须是照字字面意思思的表或或列名,不不允许模模式和空空白。某些范围列列被服务务器视为为大小写写敏感的的,其余余不是。这这些原则则总结在在下表中中。特别别注意TTablle_nnamee值总是是被看作作大小写写敏感的的,即使使在查询询中的表表名的大大小写敏敏感性对对待视服服务器运运行的主主机的文文件系统统
24、而定(UUNIXX下是大大小写敏敏感,而而Winndowws不是是)。某些作用域域列被服服务器视视为大小小写敏感感的,其其余不是是。这些些原则总总结在下下表中。特特别注意意Tabble_namme值总总是被看看作大小小写敏感感的,即即使在查查询中的的表名的的大小写写敏感性性对待视视服务器器运行的的主机的的文件系系统而定定(UNNIX下下是大小小写敏感感,而WWinddowss不是)。表7-4 作用用域列的的大小写写敏感性性列大小写敏感感性HostNoUserYesPasswworddYesDbYesTablee_naameYesColummn_nnameeNo7.1.33.2授授权表UUser
25、r、Dbb和Hoost的的权限列列的内容容在userr、dbb和hoost表表中,所所有权限限字段被被声明为为ENUUM(N,Y)-每一个个都可有有值NN或Y,并并且缺省省值是N.7.1.33.3授授权表ttablles_priiv和ccoluumnss_prriv的的权限列列的内容容在tablles_priiv和ccoluumnss_prriv表表中,权权限字段段被声明明为SEET字段段:表7-5 授权权表taablees_pprivv和coolummns_priiv的权权限列的的类型表名字段名可能的集合合成员tablees_pprivvTablee_prrivSeleect, Insser
26、tt, Uppdatte, DDeleete, Creeatee, Drrop, Graant, Reffereencees, IIndeex, AAlteertablees_pprivvColummn_pprivvSeleect, Inssertt, Uppdatte, RRefeerenncesscolummns_priivColummn_pprivvSeleect, Inssertt, Uppdatte, RRefeerenncess7.1.44权限系系统工作作原理7.1.44.1权权限系统统工作的的一般过过程MySQLL权限系系统保证证所有的的用户可可以严格格地做他他们假定定被允许许做
27、的事事情。当当你连接接一个MMySQQL服务务器时, 你的身身份由你你从那连连接的主主机和你你指定的的用户名名来决定定,系统统根据你你的身份份和你想想做什么么来授予予权限。 MySQLL在认定定身份中中考虑你你的主机机名和用用户名字字,是因因为有很很小的原原因假定定一个给给定的用用户在因因特网上上属于同同一个人人。例如如,用户户从whhiteehouuse.govv连接的的billl不必必和从m连接bbilll是同一一个人。 MySSQL通通过允许许你区分分在不同同的主机机上碰巧巧有同样样名字用用户来处处理它:你可以以对从wwhittehoousee.goov连接接授与bbilll一个权权限集
28、,而而为从m的连接接授予一一个不同同的权限限集。 MySQLL存取控控制包含含2个阶阶段: l 阶段1:服服务器检检查你是是否允许许连接。 l 阶段2:假假定你能能连接,服服务器检检查你发发出的每每个请求求。看你你是否有有足够的的权限实实施它。例例如,如如果你从从数据库库中一个个表精选选(seelecct)行行或从数数据库抛抛弃一个个表,服服务器确确定你对对表有sseleect权权限或对对数据库库有drrop权权限。 服务器在存存取控制制的两个个阶段使使用在mmysqql的数数据库中中的usser、ddb和hhostt表对存取控制制的第二二阶段(请求证证实),如如果请求求涉及表表,服务务器可以
29、以另外参参考taablees_pprivv和coolummns_priiv表。简单地说,服服务器使使用这样样的授权权表: l user表表范围字字段决定定是否允允许或拒拒绝到来来的连接接。对于于允许的的连接,权权限字段段指出用用户的全全局(超超级用户户)权限限。 l db和hoost表表一起使使用: db表范围围字段决决定用户户能从哪哪个主机机存取哪哪个数据据库。权权限字段段决定允允许哪个个操作。 当你想要一一个给定定的dbb条目应应用于若若干主机机时,hhostt表作为为db表表的扩展展被使用用。例如如,如果果你想要要一个用用户能在在你的网网络从若若干主机机使用一一个数据据库,在在用户的的d
30、b表表的Hoost条条目设为为空值,然然后将那那些主机机的每一一个移入入hosst表。这这个机制制详细描描述在77.1.4.33 存取取控制, 阶段段2:请请求证实实。 tablees_pprivv和coolummns_priiv表类类似于ddb表,但但是更精精致:他他们在表表和列级级应用而而非在数数据库级级。 注意管理权权限(rrelooad, shhutddownn, 等等等)仅仅在usser表表中被指指定。这这是因为为管理性性操作是是服务器器本身的的操作并并且不是是特定数数据库,因因此没有有理由在在其他授授权表中中列出这这样的权权限。事事实上,只只需要请请教usser表表来决定定你是否否
31、执行一一个管理理操作。 file权权限也仅仅在usser表表中指定定。它不不是管理理性权限限,但你你读或谢谢在服务务器主机机上的文文件的的的能力独独立于你你正在存存取的数数据库。 当mysqqld服服务器启启动时,读读取一次次授权表表内容。对对授权表表的更改改生效在在7.55权限修修改何时时生效。一个有用的的诊断工工具是mmysqqlacccesss脚本本,由CCarllierr Yvves 提供给给MySSQL分分发。使使用-hellp选项项调用mmysqqlacccesss查明明它怎样样工作。注注意:mmysqqlacccesss仅用用useer、ddb和hhostt表仅检检查存取取。它不
32、不检查表表或列级级权限。7.1.44.2存存取控制制, 阶阶段1:连接证证实当你试图联联接一个个MySSQL服服务器时时,服务务器基于于你的身身份和你你是否能能通过供供应正确确的口令令验证身身份来接接受或拒拒绝连接接。如果果不是,服服务器完完全具结结你的存存取,否否则,服服务器接接受连接接,然后后进入阶阶段2并并且等待待请求。 你的身份基基于2个个信息: l 你从那个主主机连接接 l 你的MySSQL用用户名 身份检查使使用3个个useer表(Hosst, Useer和PPasssworrd)范范围字段段执行。服服务器只只有在一一个usser表表条目匹匹配你的的主机名名和用户户名并且且你提供供
33、了正确确的口令令时才接接受连接接。 在userr表范围围字段可可以如下下被指定定: 一个Hosst值可可以是主主机名或或一个IIP数字字,或loccalhhostt指出出本地主主机。 你可以在HHostt字段里里使用通通配符字字符“%”和“_”。 一个Hosst值%匹匹配任何何主机名名,一个个空白HHostt值等价价于%。注注意这些些值匹配配能创建建一个连连接到你你的服务务器的任任何主机机! 通配符字符符在Usser字字段中不不允许,但但是你能能指定空空白的值值,它匹匹配任何何名字。如如果usser表表匹配到到来的连连接的条条目有一一个空白白的用户户名,用用户被认认为是匿匿名用户户(没有有名字
34、的的用户),而非非客户实实际指定定的名字字。这意意味着一一个空白白的用户户名被用用于在连连接期间间的进一一步的存存取检查查(即,在在阶段22期间)。 Passwwordd字段可可以是空空白的。这这不意味味着匹配配任何口口令,它它意味着着用户必必须不指指定一个个口令进进行连接接。 非空白Paasswwordd值代表表加密的的口令。 MySSQL不不以任何何人可以以看的纯纯文本格格式存储储口令,相相反,正正在试图图联接的的一个用用户提供供的口令令被加密密(使用用PASSSWOORD()函数数),并并且与存存储了uuserr表中的的已经加加密的版版本比较较。如果果他们匹匹配,口口令是正正确的。 下面
35、的例子子显示出出各种uuserr表中HHostt和Usser条条目的值值的组合合如何应应用于到到来的连连接:表7-6 Hoost和和Useer条目目的值的的组合Host值值User值值被条目匹配配的连接接hostt.doomaiin.ccnGwennGwen, 从hhostt.doomaiin.ccn连接接hostt.doomaiin.ccn任何用户, 从hhostt.doomaiin.ccn连接接,%GwennGwen, 从任任何主机机连接%任何用户, 从任任何主机机连接%.looc.ggovGwennGwen, 从在在locc.goov域的的任何主主机连接接x.y.%GwennGwen,
36、从t、x.y.ccom,x.yy.eddu等联联接。(这这或许无无用)144.1555.1666.1177GwennGwen, 从有有1444.1555.1166.1777 IPP 地址址的主机机连接144.1555.1666.%GwennGwen, 从1144.1555.1666 CC类子网网的任何何主机连连接既然你能在在Hosst字段段使用IIP通配配符值(例如,1444.1555.1166.%匹匹配在一一个子网网上的每每台主机机),有有可能某某人可能能企图探探究这种种能力,通通过命名名一台主主机为m。为了了阻止这这样的企企图,MMySQQL不允允许匹配配以数字字和一个个点起始始的主机机名
37、,这这样,如如果你用用一个命命名为类类似m的主机机,它的的名字决决不会匹匹配授权权表中HHostt列。只只有一个个IP数数字能匹匹配IPP通配符符值。 一个到来的的连接可可以被在在useer表中中的超过过一个条条目匹配配。例如如,一个个由Gwwen从从的的连接匹匹配多个个条目如如上所述述。如果果超过一一个匹配配,服务务器怎么么选择使使用哪个个条目呢呢?服务务器在启启动时读读入usser表表后通过过排序来来解决这这个问题题,然后后当一个个用户试试图连接接时,以以排序的的顺序浏浏览条目目,第一一个匹配配的条目目被使用用。 MySQLL服务器器按一种种特定方方式排序序符授权权表中的的记录,然然后通过
38、过按序浏浏览记录录匹配到到来的连连接。找找到的第第一个匹匹配决定定了被使使用的记记录。理理解MyySQLL使用的的排序顺顺序很重重要,特特别是对对useer表。当服务器读读取usser表表内容时时,它根根据在HHostt和Usser列列中的值值排序记记录,HHostt值起决决定作用用(相同同的Hoost值值排在一一起,然然后再根根据Usser值值排序)。然然而,排排序不是是典序(按按词排序序),它它只是部部分是。要要牢记的的是字面面上的词词优先于于模式。这这意味着着如果你你正从cclieent.youur.nnet连连接服务务器而HHostt有clliennt.yyourr.neet和%t两个
39、值值,则第第一个先先选。类类似地,%t优先于于%.nnet,然然后是%。IPP地址的的匹配也也是这样样的。总之一句话话,越具具体越优优先。user表表排序工工作如下下,假定定useer表看看起来像像这样: +-+-+-| Hosst | Useer | .+-+-+-| % | rooot | .| % | jerrry | .| loccalhhostt | rooot | .| loccalhhostt | | .+-+-+-当服务器在在表中读读取时,它它以最特特定的HHostt值为先先的次序序排列(%在Hoost列列里意味味着“任何主主机”并且是是最不特特定的)。有相相同Hoost值值的
40、条目目以最特特定的UUserr值为先先的次序序排列(一个空空白Usser值值意味着着“任何用用户”并且是是最不特特定的)。最终终排序的的useer表看看起来像像这样: +-+-+-| Hosst | Useer | .+-+-+-| loccalhhostt | rooot | .| loccalhhostt | | .| % | jerrry | .| % | rooot | .+-+-+-当一个连接接被尝试试时,服服务器浏浏览排序序的条目目并使用用找到的的第一个个匹配。对对于由jjefffreyy从loocallhosst的一一个连接接,在HHostt列的loccalhhostt条目目首先
41、匹匹配。那那些有空空白用户户名的条条目匹配配连接的的主机名名和用户户名。(%/jeeffrrey条目也也将匹配配,但是是它不是是在表中中的第一一匹配。)这是另外一一个例子子。假定定useer表看看起来像像这样: +-+-+-| Hosst | UUserr | .+-+-+-| % | jjerrry | .| | | .+-+-+-排序后的表表看起来来像这样样: +-+-+-| Hosst | UUserr | .+-+-+-| | | .| % | jjerrry | .+-+-+-一个由jeerryy从n的连接接被第一一个条目目匹配,而而一个由由jerrry从从whiitehhousse
42、.ggov的的连接被被第二个个匹配。 普遍的误解解是认为为,对一一个给定定的用户户名,当当服务器器试图对对连接寻寻找匹配配时,明明确命名名那个用用户的所所有条目目将首先先被使用用。这明明显不是是事实。先先前的例例子说明明了这点点,在那那里一个个由jeerryy从n的连接接没被包包含jjerrry作作为Usser字字段值的的条目匹匹配,但但是由没没有用户户名的题题目匹配配! 如果你有服服务器连连接的问问题,打打印出uuserr表并且且手工排排序它看看看第一一个匹配配在哪儿儿进行。7.1.44.3存存取控制制,阶段段2:请请求证实实一旦你建立立了一个个连接,服服务器进进入阶段段2。对对在此连连接上
43、进进来的每每个请求求,服务务器检查查你是否否有足够够的权限限来执行行它,它它基于你你希望执执行的操操作类型型。这正正是在授授权表中中的权限限字段发发挥作用用的地方方。这些些权限可可以来子子useer、ddb、hhostt、taablees_pprivv或coolummns_priiv表的的任何一一个。授授权表用用GRAANT和和REVVOKEE命令操操作。(你你可以发发觉参考考第七章章 权限限系统怎怎样工作作很有帮帮助,它它列出了了在每个个权限表表中呈现现的字段段。)user表表在一个个全局基基础上授授予赋予予你的权权限,该该权限不不管当前前的数据据库是什什么均适适用。例例如,如如果usser表表授予你你delletee权限, 你可以以删除在在服务器器主机上上从任何何数据库库删除行行!换句句话说,uuserr表权限限是超级级用户权权限。只只把usser表表的权限限授予超超级用户户如服务务器或数数据库主主管是明明智的。对对其他用用户,你你应该把把在usser表表中的权权限设成成N并且仅仅在一个个特定数数据库的的基础上上授权, 使用ddb和hhostt表。