《MySQL金典培训教程:10第七章14760.docx》由会员分享,可在线阅读,更多相关《MySQL金典培训教程:10第七章14760.docx(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章数据库安全本章要点:v MySQLL权限系统统原理v 如何授予撤撤销用户和和授权v 如何直接修修改授权表表v 授予用户权权限的规范范和注意事事项作为一个MMySQLL的系统管管理员,你你有责任维维护你的MMySQLL数据库系系统的数据据安全性和和完整性。本本文主要主主要介绍如如何建立一一个安全的的MySQQL系统,从从系统内部部和外部网网络两个角角度,为你你提供一个个指南。本章主要考考虑下列安安全性有关关的问题:l 为什么安全全性很重要要,你应该该防范那些些攻击? l 服务器面临临的风险(内内部安全性性),如何何处理? l 连接服务器器的客户端端风险(外外部安全性性),如何何处理? My
2、SQLL管理员有有责任保证证数据库内内容的安全全性,使得得这些数据据记录只能能被那些正正确授权的的用户访问问,这涉及及到数据库库系统的内内部安全性性和外部安安全性。内部安全性性关心的是是文件系统统级的问题题,即,防防止MySSQL数据据目录(DDATADDIR)被被在服务器器主机有账账号的人(合合法或窃取取的)进行行攻击。如如果数据目目录内容的的权限过分分授予,使使得每个人人均能简单单地替代对对应于那些些数据库表表的文件,那那么确保控控制客户通通过网络访访问的授权权表设置正正确,对此此毫无意义义。外部安全性性关心的是是从外部通通过网络连连接服务器器的客户的的问题,即即,保护MMySQLL服务器
3、免免受来自通通过网络对对服务器的的连接的攻攻击。你必必须设置MMySQLL授权表(ggrantt tabble),使使得他们不不允许访问问服务器管管理的数据据库内容,除除非提供有有效的用户户名和口令令。下面就详细细介绍如何何设置文件件系统和授授权表myysql,实实现MySSQL的两两级安全性性。7.1 MMySQLL的权限系系统MySQLL有一套先先进的但非非标准的安安全/授权权系统,掌掌握其授权权机制是开开始操作MMySQLL数据库必必须要走的的第一步,对对于一个熟熟悉SQLL基本操作作的人来说说,也是MMySQLL所有的知知识中比较较难以理解解的一个部部分。本节节通过揭开开其授权系系统的
4、运作作机制,希希望大家能能够可以更更好地操作作和使用这这个优秀的的数据库系系统。 MySQLL的安全系系统是很灵灵活的,它它允许你以以多种不同同方式设置置用户权限限。一般地地,你可使使用标准的的SQL语语句GRAANT和RREVOKKE语句做做,他们为为你修改控控制客户访访问的授权权表,然而而,你可能能由一个不不支持这些些语句的老老版本的MMySQLL(在3.22.111之前这这些语句不不起作用),或或者你发觉觉用户权限限看起来不不是以你想想要的方式式工作。对对于这种情情况,了解解MySQQL授权表表的结构和和服务器如如何利用它它们决定访访问权限是是有帮助的的,这样的的了解允许许你通过直直接修
5、改授授权表增加加、删除或或修改用户户权限,它它也允许你你在检查这这些表时诊诊断权限问问题。7.1.11授权表的的结构通过网络连连接服务器器的客户对对MySQQL数据库库的访问由由授权表内内容来控制制。这些表表位于myysql数数据库中,并并在第一次次安装MyySQL的的过程中初初始化(运运行myssql_iinstaall_ddb脚本)。授授权表共有有5个表:userr、db、hhost、ttablees_prriv和ccolummns_ppriv。7.1.11.1授权权表useer、dbb和hosst的结构构和作用表7-1 授权表表userr、db和和hostt的结构User表表Db表Hos
6、t表表作用域列HostHostHostDbDbUserUserPasswword数据库/表表的权限列列Alterr_priivAlterr_priivAlterr_priivCreatte_prrivCreatte_prrivDelette_prrivDelette_prrivDrop_privvDrop_privvIndexx_priivIndexx_priivIndexx_priivInserrt_prrivInserrt_prrivReferrencees_prrivReferrencees_prrivSelecct_prrivSelecct_prrivUpdatte_prrivUpda
7、tte_prrivUpdatte_prrivAlterr_priivAlterr_priivAlterr_priivFile_privvGrantt_priivGrantt_priivGrantt_priivProceess_pprivReloaad_prrivShutddown_privv授权表的内内容有如下下用途:l user表表user表表列出可以以连接服务务器的用户户及其口令令,并且它它指定他们们有哪种全全局(超级级用户)权权限。在uuser表表启用的任任何权限均均是全局权权限,并适适用于所有有数据库。例例如,如果果你启用了了DELEETE权限限,在这里里列出的用用户可以从从任何表中中
8、删除记录录,所以在在你这样做做之前要认认真考虑。 l db表db表列出出数据库,而而用户有权权限访问它它们。在这这里指定的的权限适用用于一个数数据库中的的所有表。 l host表表host表表与db表表结合使用用在一个较较好层次上上控制特定定主机对数数据库的访访问权限,这这可能比单单独使用ddb好些。这这个表不受受GRANNT和REEVOKEE语句的影影响,所以以,你可能能发觉你根根本不是用用它。7.1.11.2授权权表tabbles_privv和collumnss_priiv的结构构和作用表7-2 授权表表tablles_ppriv和和coluumns_privv的结构授权表taabless
9、_priiv授权表coolumnns_prriv作用域列HostHostDbDbUserUserTablee_nammeTablee_nammeColummn_naame权限列Tablee_priivColummn_prriv其他列TimesstamppTimesstamppGranttorMySQLL没有roows_ppriv表表,因为它它不提供记记录级权限限,例如,你你不能限制制用户于表表中包含特特定列值的的行。如果果你确实需需要这种能能力,你必必须用应用用编程来提提供。如果果你想执行行建议的记记录级锁定定,你可用用GET_LOCKK()函数数做到。授权表的内内容有如下下用途:l tabl
10、ees_prriv表tablees_prriv表指指定表级权权限,在这这里指定的的一个权限限适用于一一个表的所所有列。 l colummns_ppriv表表colummns_ppriv表表指定列级级权限。这这里指定的的权限适用用于一个表表的特定列列。 tablees_prriv和ccolummns_ppriv表表在MySSQL 33.22.11版引引进(与GGRANTT语句同时时)。如果果你有较早早版本的MMySQLL,你的mmysqll数据库将将只有usser、ddb和hoost表。如如果你从老老版本升级级到3.222.111或更新,而而没有taabless_priiv和coolumnns_
11、prriv表,运运行myssql_ffix_ppriviilegees_taabless脚本创建建它们。7.1.22用户的权权限权限信息用用userr、db、hhost、ttablees_prriv和ccolummns_ppriv表表被存储在在mysqql数据库库中(即在在名为myysql的的数据库中中)。在MMySQLL启动时和和在7.55权限修改改何时生效效所说的情情况时,服服务器读入入这些数据据库表内容容。7.1.22.1数据据库和表的的权限下列权限运运用于数据据库和表上上的操作。l SELECCT允许你使用用SELEECT语句句从表中检检索数据。SSELECCT语句只只有在他们们真正从
12、一一个表中检检索行是才才需要seelectt权限,你你可以执行行某个SEELECTT语句,甚甚至没有任任何到服务务器上的数数据库里的的存取任何何东西的许许可。例如如,你可使使用myssql客户户作为一个个简单的计计算器: mysqll SEELECTT 1+11;mysqll SEELECTT PI()*2;l UPDATTE 允许你修改改表中的已已有的记录录。 l INSERRT允许在表中中插入记录录l DELETTE允许你从表表中删除现现有记录。 l ALTERR允许你使用用ALTEER TAABLE语语句,这其其实是一个个简单的第第一级权限限,你必须须由其他权权限,这看看你想对数数据库实
13、施施什么操作作。 l CREATTE允许你创建建数据库和和表,但不不允许创建建索引。 l DROP允许你删除除(抛弃)数数据库和表表,但不允允许删除索索引。 注意:如果果你将myysql数数据库的ddrop权权限授予一一个用户,该该用户能抛抛弃存储了了MySQQL存取权权限的数据据库! l INDEXX允许你创建建并删除索索引。 l REFERRENCEES目前不用。7.1.22.2管理理权限下列权限运运用于控制制服务器或或用户授权权能力的操操作的管理理性操作。l FILE允许你告诉诉服务器读读或写服务务器主机上上的文件。该该权限不应应该随便授授予,它很很危险,见见“回避授权权表风险”。服务器
14、器确实较谨谨慎地保持持在一定范范围内使用用该权限。你你只能读任任何人都能能读的文件件。你正在在写的文件件必须不是是现存的文文件,这防防止你迫使使服务器重重写重要文文件,如/etc/passswd或属属于别人的的数据库的的数据目录录。如果你授权权FILEE权限,确确保你不以以UNIXX的rooot用户运运行服务器器,因为rroot可可在文件系系统的任何何地方创建建新文件。如如果你以一一个非特权权用户运行行服务器,服服务器只能能在给用户户能访问的的目录中创创建文件。l GRANTT允许你将你你自己的权权限授予别别人,包括括GRANNT。 l PROCEESS允许你通过过使用SHHOW PPROCE
15、ESS语句句或myssqladdmin proccess命命令查看服服务器内正正在运行的的线程(进进程)的信信息。这个个权限也允允许你用KKILL语语句或myysqlaadminn killl命令杀杀死线程。你总是能看看到或杀死死你自己的的线程。PPROCEESS权限限赋予你对对任何线程程做这些事事情的能力力。l RELOAAD允许你执行行大量的服服务器管理理操作。你你可以发出出FLUSSH语句,你你也能指性性mysqqladmmin的rreloaad、reefressh、fllush-hostts、fllush-logss、fluush-ppriviilegees和fllush-tablle
16、s等命命令。 l SHUTDDOWN允许你用mmysqlladmiin shhutdoown关闭闭服务器。 在userr、db和和hostt表中,每每一个权限限以一个单单独的列指指定。这些些列全部声声明为一个个ENUMM(N,Y)类型,所所以每个权权的缺省值值是“N”。在taabless_priiv和coolumnns_prriv中的的权限以一一个SETT表示,它它允许权限限用一个单单个列以任任何组合指指定。这两两个表比其其他三个表表更新,这这就是为什什么它们使使用更有效效的表示方方式的原因因。(有可可能在未来来,useer、dbb和hosst表也用用一个SEET类型表表示。)7.1.33授权
17、表列列的内容7.1.33.1作用用域列内容容一些范围列列要求文字字值,但它它们大多数数允许通配配符或其他他特殊值。表7-3 作用域域列的类型型字段名类型HostCHAR(60)UserCHAR(16)PasswwordCHAR(16)DbCHAR(64) (taabless_priiv和coolumnns_prriv表为为CHARR(60)l Host 一个Hosst列值可可以是一个个主机名或或一个IPP地址。值值locaalhosst意味着着本地主机机,但它只只在你用一一个loccalhoost主机机名时才匹匹配,而不不是你在使使用主机名名时。假如如你的本地地主机名是是pit.snakke.
18、neet并且在在userr表中有对对你的两条条记录,一一个有一个个Hostt值或loocalhhost,而而另一个有有pit.snakke.neet,有llocallhostt的记录将将只当你连连接loccalhoost时匹匹配,其他他在只在连连接pitt.snaake.nnet时才才匹配。如如果你想让让客户能以以两种方式式连接,你你需要在uuser表表中有两条条记录。你也可以用用通配符指指定Hosst值。可可以使用SSQL的模模式字符“%”和“_”并具有当当你在一个个查询中使使用LIKKE算符同同样的含义义(不允许许regeex算符)。 SQL模模式字符都都能用于主主机名和IIP地址。如如%
19、wissc.eddu匹配任任何wissc.eddu域内的的主机,而而%.eddu匹配任任何教育学学院的主机机。类似地地,1922.1688.%匹配配任何在1192.1168 BB类子网的的主机,而而192.168.3.%匹匹配任何在在192.168.3 C类类子网的主主机。%值匹配所所有主机,并并可用于允允许一个用用户从任何何地方连接接。一个空空白的Hoost值等等同于%。(例例外:在ddb表中,一一个空白HHost值值含义是“进一步检检查hosst表”,该过程程在“查询访问问验证”中介绍。)从MySQQL 3.23起,你你也可以指指定带一个个表明那些些为用于网网络地址的的网络掩码码的IP地地
20、址,如1192.1168.1128.00/17指指定一个117位网络络地址并匹匹配其IPP地址是1192.1168.1128前117位的任任何主机。l User 用户名必须须是文字的的或空白。一一个空白值值匹配任何何用户。%作为一个个Userr值不意味味着空白,相相反它匹配配一个字面面上的%名名字,这可可能不是你你想要的。当一个到来来的连接通通过useer表被验验证而匹配配的记录包包含一个空空白的Usser值,客客户被认为为是一个匿匿名用户。 l Passwword 口令值可以以是空或非非空,不允允许用通配配符。一个个空口令不不意味着匹匹配任何口口令,它意意味着用户户必须不指指定口令。口令以一
21、个个加密过的的值存储,不不是一个字字面上的文文本。如果果你在Paasswoord列中中存储一个个照字面上上的口令,用用户将不能能连接!GGRANTT语句和mmysqlladmiin paasswoord命令令为你自动动加密口令令,但是如如果你用诸诸如INSSERT、RREPLAACE、UUPDATTE或SEET PAASSWOORD等命命令,一定定要用PAASSWOORD(new_passswordd)而不不是简单的的neww_passsworrd来指指定口令。 l Db在coluumns_privv和tabbles_privv表中,DDb值必须须是真正的的数据库名名(照字面面上),不不允许模
22、式式和空白。在在db和hhost中中,Db值值可以以字字面意义指指定或使用用SQL模模式字符%或_指定定一个通配配符。一个个%或或空白匹配配任何数据据库。 l Tablee_namme,Coolumnn_namme这些列中的的值必须是是照字面意意思的表或或列名,不不允许模式式和空白。某些范围列列被服务器器视为大小小写敏感的的,其余不不是。这些些原则总结结在下表中中。特别注注意Tabble_nname值值总是被看看作大小写写敏感的,即即使在查询询中的表名名的大小写写敏感性对对待视服务务器运行的的主机的文文件系统而而定(UNNIX下是是大小写敏敏感,而WWindoows不是是)。某些作用域域列被服
23、务务器视为大大小写敏感感的,其余余不是。这这些原则总总结在下表表中。特别别注意Taable_namee值总是被被看作大小小写敏感的的,即使在在查询中的的表名的大大小写敏感感性对待视视服务器运运行的主机机的文件系系统而定(UUNIX下下是大小写写敏感,而而Winddows不不是)。表7-4 作用域域列的大小小写敏感性性列大小写敏感感性HostNoUserYesPasswwordYesDbYesTablee_nammeYesColummn_naameNo7.1.33.2授权权表Useer、Dbb和Hosst的权限限列的内容容在userr、db和和hostt表中,所所有权限字字段被声明明为ENUUM
24、(NN,YY)-每一个都都可有值N或Y,并并且缺省值值是N.7.1.33.3授权权表tabbles_privv和collumnss_priiv的权限限列的内容容在tablles_ppriv和和coluumns_privv表中,权权限字段被被声明为SSET字段段:表7-5 授权表表tablles_ppriv和和coluumns_privv的权限列列的类型表名字段名可能的集合合成员tablees_prrivTablee_priivSeleect, Innsertt, Updaate, Deeletee, Creaate, Drrop, Grrant, RReferrencees, Inddex,
25、Alltertablees_prrivColummn_prrivSeleect, Innsertt, Updaate, Reefereencesscolummns_pprivColummn_prrivSeleect, Innsertt, Updaate, Reefereencess7.1.44权限系统统工作原理理7.1.44.1权限限系统工作作的一般过过程MySQLL权限系统统保证所有有的用户可可以严格地地做他们假假定被允许许做的事情情。当你连连接一个MMySQLL服务器时时, 你的的身份由你你从那连接接的主机和和你指定的的用户名来来决定,系系统根据你你的身份和和你想做什什么来授予予权限。 M
26、ySQLL在认定身身份中考虑虑你的主机机名和用户户名字,是是因为有很很小的原因因假定一个个给定的用用户在因特特网上属于于同一个人人。例如,用用户从whhitehhousee.govv连接的bbill不不必和从mmosofft.coom连接bbill是是同一个人人。 MyySQL通通过允许你你区分在不不同的主机机上碰巧有有同样名字字用户来处处理它:你你可以对从从whittehouuse.ggov连接接授与biill一个个权限集,而而为从的的连接授予予一个不同同的权限集集。 MySQLL存取控制制包含2个个阶段: l 阶段1:服服务器检查查你是否允允许连接。 l 阶段2:假假定你能连连接,服务务器
27、检查你你发出的每每个请求。看看你是否有有足够的权权限实施它它。例如,如如果你从数数据库中一一个表精选选(sellect)行或从数数据库抛弃弃一个表,服服务器确定定你对表有有seleect权限限或对数据据库有drrop权限限。 服务器在存存取控制的的两个阶段段使用在mmysqll的数据库库中的usser、ddb和hoost表对存取控制制的第二阶阶段(请求求证实),如如果请求涉涉及表,服服务器可以以另外参考考tablles_ppriv和和coluumns_privv表。简单地说,服服务器使用用这样的授授权表: l user表表范围字段段决定是否否允许或拒拒绝到来的的连接。对对于允许的的连接,权权限
28、字段指指出用户的的全局(超超级用户)权限。 l db和hoost表一一起使用: db表范围围字段决定定用户能从从哪个主机机存取哪个个数据库。权权限字段决决定允许哪哪个操作。 当你想要一一个给定的的db条目目应用于若若干主机时时,hosst表作为为db表的的扩展被使使用。例如如,如果你你想要一个个用户能在在你的网络络从若干主主机使用一一个数据库库,在用户户的db表表的Hosst条目设设为空值,然然后将那些些主机的每每一个移入入hostt表。这个个机制详细细描述在77.1.44.3 存存取控制, 阶段22:请求证证实。 tablees_prriv和ccolummns_ppriv表表类似于ddb表,
29、但但是更精致致:他们在在表和列级级应用而非非在数据库库级。 注意管理权权限(reeloadd, shhutdoown, 等等)仅仅在useer表中被被指定。这这是因为管管理性操作作是服务器器本身的操操作并且不不是特定数数据库,因因此没有理理由在其他他授权表中中列出这样样的权限。事事实上,只只需要请教教userr表来决定定你是否执执行一个管管理操作。 file权权限也仅在在userr表中指定定。它不是是管理性权权限,但你你读或谢在在服务器主主机上的文文件的的能能力独立于于你正在存存取的数据据库。 当mysqqld服务务器启动时时,读取一一次授权表表内容。对对授权表的的更改生效效在7.55权限修改
30、改何时生效效。一个有用的的诊断工具具是myssqlacccesss脚本,由由Carllier Yvess 提供给给MySQQL分发。使使用-hhelp选选项调用mmysqllacceess查明明它怎样工工作。注意意:myssqlacccesss仅用usser、ddb和hoost表仅仅检查存取取。它不检检查表或列列级权限。7.1.44.2存取取控制, 阶段1:连接证实实当你试图联联接一个MMySQLL服务器时时,服务器器基于你的的身份和你你是否能通通过供应正正确的口令令验证身份份来接受或或拒绝连接接。如果不不是,服务务器完全具具结你的存存取,否则则,服务器器接受连接接,然后进进入阶段22并且等待
31、待请求。 你的身份基基于2个信信息: l 你从那个主主机连接 l 你的MySSQL用户户名 身份检查使使用3个uuser表表(Hosst, UUser和和Passswordd)范围字字段执行。服服务器只有有在一个uuser表表条目匹配配你的主机机名和用户户名并且你你提供了正正确的口令令时才接受受连接。 在userr表范围字字段可以如如下被指定定: 一个Hosst值可以以是主机名名或一个IIP数字,或或loccalhoost指指出本地主主机。 你可以在HHost字字段里使用用通配符字字符“%”和“_”。 一个Hosst值%匹配任任何主机名名,一个空空白Hosst值等价价于%。注意这这些值匹配配能
32、创建一一个连接到到你的服务务器的任何何主机! 通配符字符符在Useer字段中中不允许,但但是你能指指定空白的的值,它匹匹配任何名名字。如果果userr表匹配到到来的连接接的条目有有一个空白白的用户名名,用户被被认为是匿匿名用户(没有名字字的用户),而非客客户实际指指定的名字字。这意味味着一个空空白的用户户名被用于于在连接期期间的进一一步的存取取检查(即即,在阶段段2期间)。 Passwword字字段可以是是空白的。这这不意味着着匹配任何何口令,它它意味着用用户必须不不指定一个个口令进行行连接。 非空白Paasswoord值代代表加密的的口令。 MySQQL不以任任何人可以以看的纯文文本格式存存
33、储口令,相相反,正在在试图联接接的一个用用户提供的的口令被加加密(使用用PASSSWORDD()函数数),并且且与存储了了userr表中的已已经加密的的版本比较较。如果他他们匹配,口口令是正确确的。 下面的例子子显示出各各种useer表中HHost和和Userr条目的值值的组合如如何应用于于到来的连连接:表7-6 Hosst和Usser条目目的值的组组合Host值值User值值被条目匹配配的连接GwennGwen, 从n连接任何用户, 从n连接,%GwennGwen, 从任何何主机连接接%任何用户, 从任何何主机连接接%.looc.goovGwennGwen, 从在lloc.ggov域的的任何
34、主机机连接x.y.%GwennGwen, 从x.y.neet、x.y.coom,x.y.eddu等联接接。(这或或许无用)144.155.166.177GwennGwen, 从有1144.1155.1166.1177 IIP 地址址的主机连连接144.155.166.%GwennGwen, 从1444.1555.1666 C类类子网的任任何主机连连接既然你能在在Hostt字段使用用IP通配配符值(例例如,1144.1155.1166.%匹配在在一个子网网上的每台台主机),有有可能某人人可能企图图探究这种种能力,通通过命名一一台主机为为144.155.166.someewherre.coom。为
35、了了阻止这样样的企图,MMySQLL不允许匹匹配以数字字和一个点点起始的主主机名,这这样,如果果你用一个个命名为类类似m的主机,它它的名字决决不会匹配配授权表中中Hostt列。只有有一个IPP数字能匹匹配IP通通配符值。 一个到来的的连接可以以被在usser表中中的超过一一个条目匹匹配。例如如,一个由由Gwenn从的的连接匹配配多个条目目如上所述述。如果超超过一个匹匹配,服务务器怎么选选择使用哪哪个条目呢呢?服务器器在启动时时读入usser表后后通过排序序来解决这这个问题,然然后当一个个用户试图图连接时,以以排序的顺顺序浏览条条目,第一一个匹配的的条目被使使用。 MySQLL服务器按按一种特定
36、定方式排序序符授权表表中的记录录,然后通通过按序浏浏览记录匹匹配到来的的连接。找找到的第一一个匹配决决定了被使使用的记录录。理解MMySQLL使用的排排序顺序很很重要,特特别是对uuser表表。当服务器读读取useer表内容容时,它根根据在Hoost和UUser列列中的值排排序记录,HHost值值起决定作作用(相同同的Hosst值排在在一起,然然后再根据据Userr值排序)。然然而,排序序不是典序序(按词排排序),它它只是部分分是。要牢牢记的是字字面上的词词优先于模模式。这意意味着如果果你正从ccliennt.yoour.nnet连接接服务器而而Hostt有t和%两两个值,则则第一个先先选。类
37、似似地,%t优先于%.nett,然后是是%。IPP地址的匹匹配也是这这样的。总之一句话话,越具体体越优先。user表表排序工作作如下,假假定useer表看起起来像这样样: +-+-+-| Hosst | Useer | .+-+-+-| % | rooot | .| % | jerrry | .| loccalhoost | rooot | .| loccalhoost | | .+-+-+-当服务器在在表中读取取时,它以以最特定的的Hostt值为先的的次序排列列(%在Hosst列里意意味着“任何主机机”并且是最最不特定的的)。有相相同Hosst值的条条目以最特特定的Usser值为为先的次序序
38、排列(一一个空白UUser值值意味着“任何用户户”并且是最最不特定的的)。最终终排序的uuser表表看起来像像这样: +-+-+-| Hosst | Useer | .+-+-+-| loccalhoost | rooot | .| loccalhoost | | .| % | jerrry | .| % | rooot | .+-+-+-当一个连接接被尝试时时,服务器器浏览排序序的条目并并使用找到到的第一个个匹配。对对于由jeeffreey从loocalhhost的的一个连接接,在Hoost列的的loccalhoost条条目首先匹匹配。那些些有空白用用户名的条条目匹配连连接的主机机名和用户户
39、名。(%/jefffrey条目也将将匹配,但但是它不是是在表中的的第一匹配配。)这是另外一一个例子。假假定useer表看起起来像这样样: +-+-+-| Hosst | Usser | .+-+-+-| % | jeerry | .| | | .+-+-+-排序后的表表看起来像像这样: +-+-+-| Hosst | Usser | .+-+-+-| | | .| % | jeerry | .+-+-+-一个由jeerry从从的连连接被第一一个条目匹匹配,而一一个由jeerry从从whittehouuse.ggov的连连接被第二二个匹配。 普遍的误解解是认为,对对一个给定定的用户名名,当服务务
40、器试图对对连接寻找找匹配时,明明确命名那那个用户的的所有条目目将首先被被使用。这这明显不是是事实。先先前的例子子说明了这这点,在那那里一个由由jerrry从n的连接没没被包含jerrry作为为Userr字段值的的条目匹配配,但是由由没有用户户名的题目目匹配! 如果你有服服务器连接接的问题,打打印出usser表并并且手工排排序它看看看第一个匹匹配在哪儿儿进行。7.1.44.3存取取控制,阶阶段2:请请求证实一旦你建立立了一个连连接,服务务器进入阶阶段2。对对在此连接接上进来的的每个请求求,服务器器检查你是是否有足够够的权限来来执行它,它它基于你希希望执行的的操作类型型。这正是是在授权表表中的权限
41、限字段发挥挥作用的地地方。这些些权限可以以来子usser、ddb、hoost、ttablees_prriv或ccolummns_ppriv表表的任何一一个。授权权表用GRRANT和和REVOOKE命令令操作。(你你可以发觉觉参考第七七章 权限限系统怎样样工作很有有帮助,它它列出了在在每个权限限表中呈现现的字段。)user表表在一个全全局基础上上授予赋予予你的权限限,该权限限不管当前前的数据库库是什么均均适用。例例如,如果果userr表授予你你deleete权限限, 你可可以删除在在服务器主主机上从任任何数据库库删除行!换句话说说,useer表权限限是超级用用户权限。只只把useer表的权权限授
42、予超超级用户如如服务器或或数据库主主管是明智智的。对其其他用户,你你应该把在在userr表中的权权限设成N并且且仅在一个个特定数据据库的基础础上授权, 使用dbb和hosst表。 db和hoost表授授予数据库库特定的权权限。在范范围字段的的值可以如如下被指定定: 通配符字符符“%”和“_”可被用于于两个表的的Hostt和Db字字段。 在db表的的%HHost值值意味着“任何主机机”,在dbb表中一个个空白Hoost值意意味着“对进一步步的信息咨咨询hosst表”。 在hostt表的一个个%或或空白Hoost值意意味着“任何主机机”。 在两个表中中的一个%或空空白Db值值意味着“任何数据据库”
43、。 在两个表中中的一个空空白Useer值匹配配匿名用户户。 db和hoost表在在服务器启启动时被读读取和排序序(同时它它读useer表)。ddb表在HHost、DDb和Usser范围围字段上排排序,并且且hostt表在Hoost和DDb范围字字段上排序序。对于uuser表表,排序首首先放置最最特定的值值然后最后后最不特定定的值,并并且当服务务器寻找匹匹配入条目目时,它使使用它找到到的第一个个匹配。 tablees_prriv和ccolummns_ppriv表表授予表和和列特定的的权限。在在范围字段段的值可以以如下被指指定: 通配符“%”和“_”可用在使使用在两个个表的Hoost字段段。 在两个表中中的一个%或空空白Hosst意味着着“任何主机机”。 在两个表中中的Db、TTablee_namme和Coolumnn_namme字段不不能包含通通配符或空空白。 tablees_prriv和ccolummns_ppriv表表在Hosst、Dbb和Useer字段上上被排序。这这类似于ddb表的排排序,尽管管因为只有有Hostt字段可以以包含通配配符,但排排序更简单单。 请求证实进进程在下面面描述。(如如果你熟悉悉存取检查查的源代码码,你会注注意到
限制150内