作者:天极软件 来源:天极软件
一旦你设立设置配备摆设了一个毗连,效劳器进入阶段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
)让你确保你的存取权限实际上以你以为的方式被设置。
版权声明:
原创作品,答应转载,转载时请务必以超链接体式格局标明文章 原始情由 、作者信息和本声明。否则将清查法律责任。