grant all赋权后mysql.user表权限字段还是N,但能登录和新建表
grant all privileges on linuxeye.* to linuxeye@’localhost’ identified by ‘linuxeye’;
select * from myql.user where user=’linuxeye’; 发现里面具体权限字段还是N,但是通过客户端却可以登录和新建表。
MySQL访问控制2个阶段:
第一阶段:当你试图连接MySQL服务器时,服务器基于你的身份以及你是否能通过供应正确的密码验证身份来接受或拒绝连接。如果不是,服务器完全拒绝你的访问,否则,服务器接受连接,然后进入阶段2并且等待请求。
你的身份基于2个信息:
- 你从那个主机连接
- 你的MySQL用户名
身份检查使用3个user表(Host, User和Password)范围列执行。服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接。
第二阶段:一旦你建立了连接,服务器进入访问控制的阶段2。对在此连接上进来的每个请求,服务器检查你想执行什
么操作,然后检查是否有足够的权限来执行它。这正是在授权表中的权限列发挥作用的地方。这些权限可以来自user、db、host、
tables_priv或columns_priv表。
user表在全局基础上授予赋予你的权限,该权限不管当前的数据库是什么均适用。例如,如果user表授予你DELETE权限,
你可以删除在服务器主机上从任何数据库删除行!换句话说,user表权限是超级用户权限。只把user表的权限授予超级用户如服务器或数据库主管是明智
的。对其他用户,你应该把在user表中的权限设成’N'并且仅在特定数据库的基础上授权。你可以为特定的数据库、表或列授权。
对数据库有关的请求(INSERT、UPDATE等等),服务器首先通过查找user表行来检查用户的全局(超级用户)权限。如果行允许请求的操作,访问被授权。如果在user表中全局权限不够,服务器通过检查db和host表确定特定的用户数据库权限。