那为什么非root用户密码为空时可以登陆使用呢?难道权限和密码相关?

解决方案 »

  1.   

    是的..授权表包含两种列:决定一个权限何时运用的范围列和决定授予哪种权限的权限列。
    2.1.1 授权表范围列
      授权表范围列指定表中的权限何时运用。
      每个授权表条目包含Host和User列来指定权限何时运用于一个从某主机的连接服务器的用户。
      其他表包含附加的范围列,如db表包含一个Db列指出权限运用于哪个数据库。
      类似地,tables_priv和columns_priv表包含范围字段,缩小范围到一个数据库中的特定表或一个表的特定列。
    范围列内容
      一些范围列要求文字值,但它们大多数允许通配符或其他特殊值。 
    Host 
      Host列值可以是一个主机名、一个IP地址或'localhost'指出本地主机。
      你可以在Host字段里使用通配符字符“%”和“_”。
      %值匹配所有主机,并可用于允许一个用户从任何地方连接。一个空白的Host值等同于%。
      如%wisc.edu匹配任何wisc.edu域内的主机,而%.edu匹配任何教育学院的主机。
      类似地,192.168.%匹配任何在192.168 B类子网的主机,
      而192.168.3.%匹配任何在192.168.3 C类子网的主机。
     (例外:在db表中,一个空白Host值含义是“进一步检查host表”)User 
      用户名必须是文字的或空白。
      User字段中不支持通配符,但是你能指定一个空白值匹配任何用户。
      %作为一个User值并不意味着空白,相反地它匹配一个字面上的%名字,这可能不是你想要的。Password 
      口令值可以是空或非空,不允许用通配符。
      一个空口令并不意味着匹配任何口令,它意味着用户连接服务器时不得指定口令。
      口令是以一个加密过的值存储的,而不是一个字面上的文本。
      如果你在Password列中存储一个实际字面上的口令,用户将不能连接!
      GRANT语句和mysqladmin password命令为你自动加密口令,
      但是如果你用诸如INSERT、REPLACE、UPDATE或SET PASSWORD等命令,
      一定要用PASSWORD("new_password")函数而不是简单的"new_password"来指定口令。 
      例如 UPDATE user SET Password=PASSWORD('your password') WHERE User='root';