Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

8.2.13 何时生效的权限更改

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

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

如果您直接使用语句如 INSERTUPDATEDELETE(这不是推荐的做法),这些更改不会对权限检查产生影响,直到您告诉服务器重新加载表格或重新启动服务器。因此,如果您直接修改授权表但忘记重新加载它们,这些更改将 没有效果,直到您重新启动服务器。这可能会让您感到困惑,为何您的更改似乎没有效果!

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

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

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

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

    Note

    客户端应用程序可能会缓存数据库名称;因此,这种效果可能不会对它们可见,除非它们实际更改为不同的数据库。

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

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

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