权限变更的影响 - xiaoboluo768/mysql-system-schema GitHub Wiki
- 当mysqld启动时,将读取所有权限表的内容到内存中。后续所有用户对MySQL Server的访问的权鉴都是基于内存中保存的这些值进行
- 如果在MySQL Server运行期间使用帐户管理语句(如GRANT,REVOKE,SET PASSWORD或RENAME USER)间接修改了权限表,则Server会立即将权限表中的内容重新加载到内存中
- 如果在MySQL Server运行期间使用INSERT,UPDATE或DELETE等语句直接修改权限表,那么对权限表的更改不会立即生效,除非重新启动Server或使用flush privileges;语句或者mysqladmin flush-privileges|reload等命令来重新加载权限表
- 对于权限表的重载,需要注意如下事项:
- 对于表和列级权限,修改并重载权限表之后,对于已经建立的客户端连接,会在对表、列的下一个请求中生效。对于新建连接,第一个请求即生效
- 对于库级别权限,修改并重载权限表之后,对于已经建立的客户端连接,会在下一次使用use db_name;语句时生效。对于新建连接,第一个请求即生效
* PS:如果回收了某用户的某库的权限,但客户端是已经建立连接的且客户端当前默认库正好是已回收权限的库,则如果客户端不使用use db_name;语句切换默认库,对于该客户端来讲可能无法感知到库级别权限发生了修改
- 对于全局权限和密码的修改,不影响已建立连接的客户端,只针对重连或新创建的客户端连接生效
- 如果Server 启动时使用了--skip-grant-tables选项,则Server不会读权限表,也不会进行任何访问权限控制,这个时候任何人都可以免密码登录数据库并可以做任何事情,这种情况除非维护时间窗口,否则禁止使用,在这种情况下,如果要重新加载权限表,无需重新启动,只需要执行flush privileges;语句即可
上一篇:第二阶段(权限检查) |下一篇:MySQL 常见连接问题