MySQL存取节制,阶段2:恳求证实
作者:天极软件 来源:天极软件
一旦你设立设置配备摆设了一个毗连,效劳器进入阶段2。对在此毗连上出去的每个恳求,效劳器反省你可否有充沛的权限来实行它,它基于你进展实行的操作典型圭臬尺度。这恰是在授权表中的权限字段发扬感染的处所。这些权限可以来子user、db、host、tables_priv或columns_priv表的任何一个。授权表用GRANT和REVOKE饬令操作。见7.26 GRANT和REVOKE 句法。(你可以发觉参考6.6 权限零碎怎样任务很有帮忙,它列出了在每个权限表中呈现的字段。)
user表在一个全局根本上付与付与你的权限,该权限岂论以后的数据库是什么均实用。例如,要是user表付与你delete权限, 你可以删除在效劳器主机上从任何数据库删除行!换句话说,user表权限是超等用户权限。只把user表的权限付与超等用户如效劳器或数据库主管是明智的。对其他用户,你应该把在user表中的权限设成'N'并且仅在一个特定数据库的根本上授权, 运用db和host表。
db和host表付与数据库特定的权限。在范畴字段的值可以如下被指定:
- 通配符字符“%”和“_”可被用于两个表的
Host和Db字段。 - 在
db表的'%'Host值意味着“任何主机”,在db表中一个空缺Host值意味着“对进一步的信息咨询host表”。 - 在
host表的一个'%'或空缺Host值意味着“任何主机”。 - 在两个表中的一个
'%'或空缺Db值意味着“任何数据库”。 - 在两个表中的一个空缺
User值成家匿名用户。
db和host表在效劳器启动时被读取和排序(同时它读user表)。db表在Host、Db和User范畴字段上排序,并且host表在Host和Db范畴字段上排序。对于user表,排序首先安置最特定的值然后最初最不特定的值,并且当效劳器根究成家入条目时,它运用它找到的第一个成家。
tables_priv和columns_priv表付与表和列特定的权限。在范畴字段的值可以如下被指定:
- 通配符“%”和“_”可用在运用在两个表的
Host字段。 - 在两个表中的一个
'%'或空缺Host意味着“任何主机”。 - 在两个表中的
Db、Table_name和Column_name字段不克不及包括通配符或空缺。
tables_priv和columns_priv表在Host、Db和User字段上被排序。这相似于db表的排序,只管由于只需Host字段可以包括通配符,但排序更简朴。
恳求证实历程鄙人面描绘。(要是你熟悉存取反省的源代码,你会注重到这里的描绘与在代码运用的算法略有差别。描绘等价于代码实际做的器械;它只是差别于使解释更简朴。)
对管理恳求(shutdown、reload等等),效劳器仅反省user表条目,由于那是独一指定管理权限的表。要是条目答应恳求的操作,存取被授权了,否则回绝。例如,要是你想要实行mysqladmin shutdown,然则你的user表条目没无为你付与shutdown权限,存取乃至不消反省db或host表就被回绝。(由于他们不包括Shutdown_priv行列,没有多么做的需求。)
对数据库有关的恳求(insert、update等等),效劳器首先经由历程查找user表条目来反省用户的全局(超等用户)权限。要是条目答应恳求的操作,存取被授权。要是在user表中全局权限缺乏,效劳器经由历程反省db和host表确定特定的用户数据库权限:
- 效劳器在
db表的Host、Db和User字段上查找一个成家。Host和User对应毗连用户的主机名和MySQL用户名。Db字段对哄骗户想要存取的数据库。要是没有Host和User的条目,存取被回绝。 - 要是
db表中的条目有一个成家并且它的Host字段不是空缺的,该条目定义用户的数据库特定的权限。 - 要是成家的
db表的条目的Host字段是空缺的,它走漏闪现host表陈列主机应该被答应存取数据库的主机。在这种景遇下,在host表中作进一步查找以发明Host和Db字段上的成家。要是没有host表条目成家,存取被回绝。假设有成家,用户数据库特定的权限以在db和host表的条目的权限,即在两个条目都是'Y'的权限的交集(而不是并集!)谋略。(多么你可以付与在db表条目中的宏壮权限,然后用host表条目按一个主机一个主机为根当地有选择地限制它们。)
在确定了由db和host表条目付与的数据库特定的权限后,效劳器把他们加到由user表付与的全局权限中。要是结果答应恳求的操作,存取被授权。否则,效劳器反省在tables_priv和columns_priv表中的用户的表和列权限并把它们加到用户权限中。基于此结果答应或回绝存取。
用布尔术语走漏闪现,背面关于一个用户权限如何谋略的描绘可以多么总结:
global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges
它可以不清楚,为什么呢,要是全局user条目的权限最初发明对恳求的操作缺乏,效劳器以后把这些权限加到数据库、表和列的特定权限。启事是一个恳求可以要求超越一种典型圭臬尺度的权限。例如,要是你实行一个INSERT ... SELECT语句,你就都要insert和select权限。你的权限必需如斯以便user表条目付与一个权限而db表条目付与另一个。在这种景遇下,你有需求的权限实行恳求,然则效劳器不克不及自己把两个表区别开来;两个条目付与的权限必需组合起来。
host表能被用来维护一个“安全”效劳器列表。在TcX,host表包括一个在当地的网络上悉数的机械的表,这些被付与悉数的权限。
你也可以运用host表指定不屈安的主机。假定你有一台机械public.your.domain,它位于你不以为是安全的一个大众区域,你可以用下列的host表条目子答应除了那台机械外的网络上悉数主机的存取:
-------------------- ---- - | Host | Db | ... -------------------- ---- - | public.your.domain | % | ... (悉数权限设为 'N') | %.your.domain | % | ... (悉数权限设为 'Y') -------------------- ---- -
固然,你应该总是测试你在授权表中的条目(例如,运用mysqlaccess)让你确保你的存取权限实际上以你以为的方式被设置。
版权声明:
原创作品,答应转载,转载时请务必以超链接体式格局标明文章 原始情由 、作者信息和本声明。否则将清查法律责任。

浙公网安备 33010602011771号