文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


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

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 选项,则它不会读取授权表或实现任何访问控制。任何用户都可以连接并执行任何操作,这很不安全。 要使以这种方式启动的服务器读取表并启用访问检查,请刷新权限。