文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  何时生效权限更改

8.2.13 何时生效权限更改

如果 mysqld 服务器在启动时未指定 --skip-grant-tables 选项,则它会在启动过程中将所有授权表内容读取到内存中。此时,内存中的表将生效用于访问控制。

如果使用账户管理语句间接修改授权表,服务器会注意到这些更改并立即再次将授权表加载到内存中。账户管理语句在第 15.7.1 节,“账户管理语句”中进行了介绍。例子包括 GRANTREVOKESET PASSWORDRENAME USER

如果使用 INSERTUPDATEDELETE 等语句直接修改授权表(不推荐这样做),则在你指示服务器重新加载表或重新启动服务器之前,这些更改不会对权限检查产生影响。因此,如果直接更改授权表但忘记重新加载它们,则在你重新启动服务器之前,这些更改不会生效。这可能会让你想知道为什么你的更改似乎没有生效!

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

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

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

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

    注意

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

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

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

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