|
下面的例子显示出各种user表中Host和User条目的值的组合如何应用于到来的连接: Host值User值被条目匹配的连接thomas.loc.govfredfred,从thomas.loc.gov连接thomas.loc.gov任何用户,从thomas.loc.gov连接%fredfred,从任何主机连接%任何用户,从任何主机连接%.loc.govfredfred,从在loc.gov域的任何主机连接x.y.%fredfred,从x.y.net、x.y.com,x.y.edu等联接。(这或许无用)144.155.166.177fredfred,从有144.155.166.177IP地址的主机连接144.155.166.%fredfred,从144.155.166C类子网的任何主机连接
既然你能在Host字段使用IP通配符值(例如,144.155.166.%匹配在一个子网上的每台主机),有可能某人可能企图探究这种能力,通过命名一台主机为144.155.166.somewhere.com。为了阻止这样的企图,MySQL不允许匹配以数字和一个点起始的主机名,这样,如果你用一个命名为类似1.2.foo.com的主机,它的名字决不会匹配授权表中Host列。只有一个IP数字能匹配IP通配符值。
一个到来的连接可以被在user表中的超过一个条目匹配。例如,一个由fred从thomas.loc.gov的连接匹配多个条目如上所述。如果超过一个匹配,服务器怎么选择使用哪个条目呢?服务器在启动时读入user表后通过排序来解决这个问题,然后当一个用户试图连接时,以排序的顺序浏览条目,第一个匹配的条目被使用。
user表排序工作如下,假定user表看起来像这样:
+-----------+----------+-|Host|User|...+-----------+----------+-|%|root|...|%|jeffrey|...|localhost|root|...|localhost||...+-----------+----------+-
当服务器在表中读取时,它以最特定的Host值为先的次序排列(%在Host列里意味着“任何主机”并且是最不特定的)。有相同Host值的条目以最特定的User值为先的次序排列(一个空白User值意味着“任何用户”并且是最不特定的)。最终排序的user表看起来像这样: +-----------+----------+-|Host|User|...+-----------+----------+-|localhost|root|...|localhost||...|%|jeffrey|...|%|root|...+-----------+----------+-
当一个连接被尝试时,服务器浏览排序的条目并使用找到的第一个匹配。对于由jeffrey从localhost的一个连接,在Host列的localhost条目首先匹配。那些有空白用户名的条目匹配连接的主机名和用户名。(%/jeffrey条目也将匹配,但是它不是在表中的第一匹配。)
(编辑:aniston)
|