什么时候真正需要MySQL中的Flush Privileges?

时间:2016-04-06 23:14:56

标签: mysql

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

create database mydb;
grant all privileges on mydb.* to myuser@localhost identified by "mypassword";

在发出前两个命令后,我从未需要使用flush privileges命令。用户可以登录并使用他们的数据库并运行连接到数据库的PHP脚本。然而,我看到几乎每个教程都使用了这个命令。什么时候真的需要flush privileges命令,什么时候不需要?

4 个答案:

答案 0 :(得分:45)

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

From MySQL documentation

  

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

     

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

     

如果使用帐户管理间接修改授权表   诸如GRANT,REVOKE,SET PASSWORD或RENAME USER之类的陈述   服务器注意到这些更改并将授权表加载到内存中   再一次。

答案 1 :(得分:12)

<强> TL; TR

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

请参阅:Stop using FLUSH PRIVILEGES

答案 2 :(得分:4)

举一些例子。我们假设您修改了名为&#39; alex&#39;的用户的密码。您可以通过多种方式修改此密码。例如:

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');

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

答案 3 :(得分:0)

除所有其他好的答案外,还有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;