创建新表和用户时,我通常只调用以下命令:
create database mydb;
grant all privileges on mydb.* to myuser@localhost identified by "mypassword";
在发出前两个命令后,我从未需要使用flush privileges
命令。用户可以登录并使用他们的数据库并运行连接到数据库的PHP脚本。然而,我看到几乎每个教程都使用了这个命令。什么时候真的需要flush privileges
命令,什么时候不需要?
答案 0 :(得分:45)
通过GRANT选项分配的权限不需要FLUSH PRIVILEGES生效 - MySQL服务器会注意到这些更改并立即重新加载授权表。
如果使用诸如的语句直接修改授权表 INSERT,UPDATE或DELETE,您的更改对权限没有影响 检查,直到您重新启动服务器或告诉它重新加载 表。如果直接更改授权表但忘记重新加载 在重新启动服务器之前,您的更改无效。这个 可能会让你想知道为什么你的改变似乎没有任何区别!
要告诉服务器重新加载授权表,请执行 flush-privileges操作。这可以通过发出FLUSH来完成 PRIVILEGES语句或执行mysqladmin flush-privileges或 mysqladmin reload命令。
如果使用帐户管理间接修改授权表 诸如GRANT,REVOKE,SET PASSWORD或RENAME USER之类的陈述 服务器注意到这些更改并将授权表加载到内存中 再一次。
答案 1 :(得分:12)
<强> TL; TR 强>
只有在使用FLUSH PRIVILEGES;
,INSERT
或UPDATE
等语句直接修改授权表时,才应使用DELETE
。
答案 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:
什么是赠款表?
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;