MySQL:啥时候真正需要 MySQL 中的 Flush Privileges?

Posted

技术标签:

【中文标题】MySQL:啥时候真正需要 MySQL 中的 Flush Privileges?【英文标题】:MySQL: When is Flush Privileges in MySQL really needed?MySQL:什么时候真正需要 MySQL 中的 Flush Privileges? 【发布时间】:2016-07-27 14:43:54 【问题描述】:

在创建新表和用户时,我通常只调用以下命令:

CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY "mypassword";

在发出前两个命令后,我从来不需要使用FLUSH PRIVILEGES 命令。用户可以登录并使用他们的数据库并运行连接到数据库的 php 脚本。然而,我看到几乎每一个教程都使用了这个命令。

什么时候真正需要FLUSH PRIVILEGES 命令,什么时候不需要?

【问题讨论】:

当东西不起作用时尝试是一件好事,但至少从 mysql 5.0 开始我还没有将其视为必要的事情。 mytable.* 使用mytable 作为数据库名称,而不是表名称。 @Barmar 谢谢,我打错了我的代码。现在已经修复了。 【参考方案1】:

通过 GRANT 选项分配的权限不需要 FLUSH PRIVILEGES 才能生效 - MySQL 服务器会注意到这些更改并立即重新加载授权表。

From MySQL documentation:

如果您直接使用以下语句修改授权表 INSERT、UPDATE 或 DELETE,您的更改对权限没有影响 检查直到您重新启动服务器或告诉它重新加载 表。如果您直接更改授权表但忘记重新加载 他们,您的更改在您重新启动服务器之前无效。这 可能会让您想知道为什么您的更改似乎没有任何区别!

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

如果您使用帐户管理间接修改授权表 GRANT、REVOKE、SET PASSWORD 或 RENAME USER 等语句, 服务器注意到这些更改并将授权表加载到内存中 立即再次。

【讨论】:

谢谢,不过我想知道为什么这么多教程专门说你需要在GRANT 命令之后使用flush privileges 你能告诉我要使用的命令吗,当我写刷新权限时没有任何反应 @kojow7 我没有任何确凿的事实支持这一点,但我相信在 MySQL 的 3.23:ish 时代,这实际上是必要的。所以这可能就是为什么它作为“过去的样子”的残余留在文档中的原因。【参考方案2】:

TL;DR

只有在直接使用INSERTUPDATEDELETE 等语句修改授权表时,才应使用FLUSH PRIVILEGES;

【讨论】:

简洁明了。【参考方案3】:

只是举几个例子。假设您修改了名为“alex”的用户的密码。您可以通过多种方式修改此密码。例如:

mysql> update* user set password=PASSWORD('test!23') where user='alex'; 
mysql> flush privileges;

您在这里使用了 UPDATE。如果您直接在授权表上使用 INSERT、UPDATE 或 DELETE,则需要使用 FLUSH PRIVILEGES 来重新加载授权表。

或者你可以这样修改密码:

mysql> set password for 'alex'@'localhost'= password('test!24');

这里不需要使用“FLUSH PRIVILEGES;” 如果您使用 GRANT、REVOKE、SET PASSWORD 或 RENAME USER 等帐户管理语句间接修改授权表,服务器会注意到这些更改并立即将授权表再次加载到内存中。

【讨论】:

谢谢你的具体例子。【参考方案4】:

除所有其他好的答案外加 2 分:

1:

什么是授权表?

from dev.mysql.com

MySQL 系统数据库包含多个授权表,其中包含有关用户帐户及其所拥有权限的信息。

澄清:在MySQL中,有一些内置数据库,其中之一是“mysql”,“mysql”数据库上的所有表都被称为授权表

2:

请注意,如果您执行:

UPDATE a_grant_table SET password=PASSWORD('1234') WHERE test_col = 'test_val';

并刷新 phpMyAdmin ,您会发现您的密码已在该表上更改,但即使您现在执行:

mysql -u someuser -p

在您执行之前,您的新密码将拒绝您的访问:

FLUSH PRIVILEGES;

【讨论】:

以上是关于MySQL:啥时候真正需要 MySQL 中的 Flush Privileges?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程与函数,我啥时候使用?

MySQL存储过程与函数,我啥时候使用?

mysql刷redo由啥线程完成

mysql+php程序中sql语句中的引号使用方法,啥时候用双引号啥时候用单引号

MySQL 中的 BLOB 和 TEXT 数据类型有啥区别?

mysql_server2008r2和mysql5.7是啥关系