Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.2 访问控制和账户管理  /  6.2.13 权限变更何时生效

6.2.13 权限变更何时生效

如果mysqld服务器在没有 --skip-grant-tables选项的情况下启动,它会在启动序列期间将所有授权表内容读入内存。内存中的表此时对访问控制有效。

如果您使用帐户管理语句间接修改授权表,服务器会注意到这些更改并立即将授权表再次加载到内存中。账户管理报表在 第 13.7.1 节“账户管理报表”中描述。示例包括 GRANTREVOKESET PASSWORDRENAME USER

如果您直接使用 、 或(不推荐)等语句修改授权表 INSERTUPDATEDELETE更改不会影响权限检查,直到您告诉服务器重新加载表或重新启动它。因此,如果您直接更改授权表但忘记重新加载它们,则更改只有在您重新启动服务器后才会生效。这可能会让您想知道为什么您的更改似乎没有任何区别!

要告诉服务器重新加载授权表,请执行 flush-privileges 操作。这可以通过发出 FLUSH PRIVILEGES语句或执行mysqladmin flush-privilegesmysqladmin reload命令来完成。

授权表重新加载会影响每个现有客户端会话的权限,如下所示:

  • 表和列权限更改在客户端的下一个请求时生效。

  • 数据库权限更改在客户端下次执行语句 时生效。USE db_name

    笔记

    客户端应用程序可以缓存数据库名称;因此,如果不实际更改到不同的数据库,他们可能看不到这种效果。

  • 连接的客户端的静态全局权限和密码不受影响。这些更改仅在后续连接的会话中生效。对动态全局权限的更改会立即应用。有关静态和动态权限之间差异的信息,请参阅 静态与动态权限。)

对会话中活动角色集的更改仅对该会话立即生效。该SET ROLE语句执行会话角色激活和停用(请参阅第 13.7.1.11 节,“SET ROLE 语句”)。

如果服务器以该 --skip-grant-tables选项启动,则它不会读取授权表或实施任何访问控制。任何用户都可以连接并执行任何操作,这是不安全的。要使服务器因此开始读取表并启用访问检查,请刷新权限。