www.baike369.com
百科369 > MySQL教程 > MySQL的访问控制

MySQL的访问控制


MySQL的访问控制

正常情况下,并不希望每个用户都可以执行所有的数据库操作。当MySQL允许一个用户执行各种操作时,它将首先核实该用户向MySQL服务器发送的连接请求,然后确认用户的操作请求是否被允许。

MySQL的访问控制分为两个阶段:连接核实阶段和请求核实阶段。

1. 连接核实阶段

当连接MySQL服务器时,服务器基于用户的身份以及用户是否能通过正确的密码身份验证,来接受或拒绝连接。

即客户端用户连接请求中会提供用户名称、主机地址名和密码,MySQL使用user表中的3个字段(Host、User和Password)执行身份检查,服务器只有在user表记录的Host和User字段匹配客户端主机名和用户名,并且提供正确的密码时才接受连接。

如果连接核实没有通过,服务器会完全拒绝访问;否则,服务器接受连接,然后进入阶段2等待用户请求。

2. 请求核实阶段

建立了连接之后,服务器进入访问控制的阶段2。对在此连接上进来的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它。这正是在授权表中的权限列发挥作用的地方。这些权限可以来自user、db、host、tables_priv或columns_priv表。

确认权限时,MySQL首先检查user表,如果指定的权限没有在user表中被授权,MySQL将检查db表,db表是下一安全层级,其中的权限限定于数据库层级,在该层级的SELECT权限允许用户查看指定数据库的所有表中的数据;如果在该层级没有找到限定的权限,则MySQL继续检查tables_priv表以及columns_priv表,如果所有权限表都检查完毕,但还是没有找到允许的权限操作,MySQL将返回错误信息,用户请求的操作不能执行,操作失败;然后,MySQL服务器继续等待用户向MySQL发出操作请求,以此循环下去……。


提示

MySQL通过向下层级的顺序检查权限表(从user表到columns_priv表),但并不是所有的权限都要执行该过程。例如,一个用户登录到MySQL服务器之后只执行对MySQL的管理操作,此时,只涉及管理权限,因此MySQL只检查user表。另外,如果请求的权限操作不被允许,MySQL也不会继续检查下一层级的表。

Copyright© 2011-2016 www.baike369.com All Rights Reserved