如果mysqld启动服务器时没有——skip-grant-tables
选项,它在启动序列中将所有授权表内容读入内存。内存中的表在此时对访问控制生效。
如果使用帐户管理语句间接修改授权表,服务器会注意到这些更改,并立即将授权表再次加载到内存中。帐户管理报表在第13.7.1节“帐户管理报表”.例子包括格兰特
,撤销
,设置密码
,重命名用户
.
如果直接使用语句修改授权表,例如插入
,更新
,或删除
(不建议这样做),更改对特权检查没有影响,直到您告诉服务器重新加载表或重新启动它。因此,如果您直接更改授权表,但忘记重新加载它们,则更改会发生变化没有影响直到重新启动服务器。这可能会让你想知道为什么你的改变似乎没有什么不同!
若要告诉服务器重新加载授予表,请执行flush-privileges操作。这可以通过发出冲洗的特权
语句或通过执行mysqladmin flush-privileges或mysqladmin重载命令。
授权表重新加载会影响每个现有客户端会话的特权,如下所示:
表和列特权更改将在客户端的下一个请求时生效。
数据库权限更改将在客户端下次执行
使用
声明。db_name
请注意客户端应用程序可以缓存数据库名称;因此,如果不实际更改到不同的数据库,这种影响可能对他们来说是不可见的。
对于已连接的客户端,静态全局特权和密码不受影响。这些更改仅在后续连接的会话中生效。对动态全局特权的更改立即应用。有关静态和动态特权之间差异的信息,请参见静态与动态特权.)
对会话中的活动角色集的更改立即生效,仅对该会话生效。的设置角色
语句执行会话角色激活和去激活(参见第13.7.1.11节,SET ROLE语句).
方法启动服务器——skip-grant-tables
选项,它不读取授权表或实现任何访问控制。任何用户都可以连接并执行任何操作,这是不安全的。若要使服务器因此开始读取表并启用访问检查,请刷新特权。