MySQL权限系统的主要功能是验证从给定主机连接的用户,并将该用户与数据库上的权限(如select, insert, update和delete)相关联。附加功能包括维护匿名用户,授予MySQL特定功能(如load data infile)和管理性操作的权限。
MySQL权限系统具有如下限制:
● 不具备用户黑名单功能
即不能显式指定拒绝访问的用户列表。也就是说,你不能显式指定一个用户,让MySQL拒绝其连接;
● 建表删表和建库删库的权限紧密相连不可分割
即有权限建表删表就有权限建库删库,有建库删库的权限就有建表删表的权限。也就是说,你不能为用户指定权限,使其可以在数据库中建表删表,但又不能创建或者删除数据库本身;
● 密码只能在全局范围内作用于一个账号
即你不能为特定对象,如数据库,表或例程,赋予密码;
MySQL权限系统的用户接口由SQL语句组成,如create user, grant和revoke
在内部,MySQL将权限信息存储在「mysql」数据库的权限表中。MySQL服务器在启动时将这些权限表的内容读入内存,并基于这些内存副本进行访问控制决策
MySQL权限系统确保所有用户只能执行自各自允许的操作。作为一个用户,当你连接到MySQL服务器时,你的身份由你连接的主机和你指定的用户名决定。当你在连接完成后发出请求时,系统将根据你的身份和你想要执行的操作来赋予权限
MySQL使用主机名和用户名来识别你的身份,因为没有理由相信来自不同主机的相同用户属于同一个人,例如从office.example.com连接的用户joe与从home.example.com连接的用户joe可能不是一个人。MySQL通过对来自不同主机的相同用户进行区分来解决这个问题:你可以对从office.example.com连接的用户joe赋予一组权限,而对从home.example.com连接的用户joe赋予另一组权限。
要查看给定账号的权限,请使用「show grants」语句,例如:
MySQL访问控制包括两个阶段:
① 服务器根据你的身份以及你所提供的密码正确与否,接受或拒绝连接;
② 连接成功后,服务器将检查你所发出的每个语句,以确定你是否有足够的权限执行它。例如,如果你尝试从表中检索行或者从数据库中删除表,则服务器将验证你是否拥有表的select权限或数据库的drop权限;