如果mysqld服务器在没有
--skip-grant-tables
选项的情况下启动,它会在启动序列期间将所有授权表内容读入内存。内存中的表此时对访问控制有效。
如果您使用帐户管理语句间接修改授权表,服务器会注意到这些更改并立即将授权表再次加载到内存中。账户管理报表在
第 13.7.1 节“账户管理报表”中描述。示例包括
GRANT
、
REVOKE
、SET
PASSWORD
和RENAME
USER
。
如果您直接使用 、 或(不推荐)等语句修改授权表
INSERT
,
UPDATE
则
DELETE
更改不会影响权限检查,直到您告诉服务器重新加载表或重新启动它。因此,如果您直接更改授权表但忘记重新加载它们,则更改只有在您重新启动服务器后才会生效。这可能会让您想知道为什么您的更改似乎没有任何区别!
要告诉服务器重新加载授权表,请执行 flush-privileges 操作。这可以通过发出
FLUSH PRIVILEGES
语句或执行mysqladmin flush-privileges或
mysqladmin reload命令来完成。
授权表重新加载会影响每个现有客户端会话的权限,如下所示:
表和列权限更改在客户端的下一个请求时生效。
数据库权限更改在客户端下次执行语句 时生效。
USE
db_name
笔记客户端应用程序可以缓存数据库名称;因此,如果不实际更改到不同的数据库,他们可能看不到这种效果。
连接的客户端的全局权限和密码不受影响。这些更改仅在后续连接的会话中生效。
如果服务器以该
--skip-grant-tables
选项启动,则它不会读取授权表或实施任何访问控制。任何用户都可以连接并执行任何操作,这是不安全的。要使服务器因此开始读取表并启用访问检查,请刷新权限。