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 表条目,因为那是唯一指定管理权限的表。如果条目许可请求的操作,存取被授权了,否则拒绝。例如,如果你想要执行sql/Index.html'>mysqladminshutdown ,但是你的user 表条目没有为你授予shutdown权限,存取甚至不用检查db 或host 表就被拒绝。(因为他们不包含Shutdown_priv 行列,没有这样做的必要。)
(编辑:aniston)
|