技术开发 频道

深入学习MySQL授权表

  情景1:失败的连接尝试

  用户“alessia”连接服务器时将被拒绝。因为,主机、用户和/或密码与保持在user表中的不匹配, 所以会拒绝用户的请求。

  情景2:user表中数据库权限为N,db表中数据库权限为Y

  1. 用户wj尝试连接时将会成功。

  2. 用户wj试图在数据库oats上执行Select命令。

  3. 服务器查看user表,对应于Select命令的条目的值为N,即表示拒绝。

  4. 服务器然后查看db表,对应于Select命令的表项的值为Y,即表示允许。

  5. 该请求将成功执行,因为该用户的db表中的SELECT字段的值为Y。

  情景3:user表中数据库权限为Y,db表中数据库权限为N

  1. 用户wj尝试连接时将会成功。

  2. 用户wj试图在数据库oats上执行Select命令。

  3. 服务器查看user表,对应于Select命令的表项的值为Y,即表示允许。 因为在user表之内授与的权限是全局性的,所以该请求会成功执行。

  情景4:user表中数据库权限为N,db表中数据库权限为N

  1. 用户wj尝试连接时将会成功。

  2. 用户wj试图在数据库oats上执行Select命令。

  3. 服务器查看user表,对应于Select命令的表项的值为N,即表示拒绝。

  4. 服务器现在会查看db表,对应于Select命令的表项的值为N,即表示拒绝。

  5. 服务器现在将查找tables_priv和columns_priv表。如果用户的请求符合表中赋予的权限,则准予访问。 否则,访问就会被拒绝。

  对于tables_priv和columns_priv表,后面会进一步加以详述。

  情景5:让我们假定下列情况为真:

  • user表中用户wj的host字段的值为%。
  • db表中用户wj对应的host字段的值为空。

  这时会发生什么情况呢?

  1. 用户wj尝试通过一个给定主机进行连接。

  2. 假设密码是正确的,那么就会连接成功,因为user表指出只要是通过用户名wj和有关密码进行连接的话,任何(字符%所代表的含义)主机都是允许的。

  3. MySQL服务器将查找db表,不过,这里没有指定主机。

  4. MySQL服务器现在将查看host表。如果该用户要连接的数据库以及用户建立连接时所在主机的名称都位于host表中,那么该用户就能够按照host表中所列出的权限来执行命令。 否则的话,用户将无法执行命令,实际上更本就无法连接。

  通过了解上述情形,读者就应该对授权系统有一定了解了。下面,我们再来仔细聊聊tables_priv表和columns_priv表。

2
相关文章