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
只有在直接使用INSERT
、UPDATE
或DELETE
等语句修改授权表时,才应使用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+php程序中sql语句中的引号使用方法,啥时候用双引号啥时候用单引号