Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  When Privilege Changes Take Effect

8.2.13 权限更改生效

如果 mysqld 服务器在不使用 --skip-grant-tables 选项的情况下启动,它将在启动序列中读取所有授权表的内容。这些内存表在该点上将生效,以供访问控制。

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

如果您使用语句,如 INSERTUPDATEDELETE(这不推荐),这些变化将对权限检查无效,直到您告诉服务器重新加载表或重新启动它。因此,如果您直接修改授权表,但忘记重新加载它们,变化将在重新启动服务器时生效。这可能会使您感到这些变化无效!

要告诉服务器重新加载授权表,执行一个 FLUSH PRIVILEGES 语句或执行一个 mysqladmin flush-privilegesmysqladmin reload 命令。

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

  • 表和列权限变化将在客户端的下一个请求中生效。

  • 数据库权限变化将在客户端执行下一个 USE db_name 语句时生效。

    Note

    客户端应用程序可能会缓存数据库名称;因此,这个影响可能不会立即对它们可见,除非实际地切换到不同的数据库。

  • 静态全局权限和密码将对已连接的客户端无效。这些变化将在后续连接的会话中生效。关于静态和动态权限的区别,请参阅 静态 versus 动态权限。)

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

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