在创建新表和用户时,我通常只调用以下命令:
CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY "mypassword";
在发出前两条命令后,我从未使用过 "FLUSH PRIVILEGES "命令。用户可以登录并使用数据库,也可以运行连接到数据库的 PHP 脚本。然而,我看到几乎所有的教程都使用了这条命令。
什么时候真的需要使用 "FLUSH PRIVILEGES "命令,什么时候又不需要呢?
通过 GRANT 选项分配的权限无需 FLUSH PRIVILEGES 即可生效--MySQL 服务器会注意到这些更改,并立即重新加载授权表。
如果直接使用诸如 如果你直接使用 INSERT、UPDATE 或 DELETE 等语句修改授权表,你的更改对权限检查没有影响。
检查,直到你重新启动服务器或告诉它重新加载表。 表。如果你直接更改了授权表,但忘记重新加载 在重新启动服务器之前,你的更改不会产生任何影响。这 可能会让你感到奇怪,为什么你的更改似乎没有任何作用! >; 要告诉服务器重新加载授权表,请执行 刷新权限操作。可以通过发出 FLUSH PRIVILEGES 语句,或执行 mysqladmin flush-privileges 或 mysqladmin reload 命令。 >; 如果你间接使用账户管理 语句(如 GRANT、REVOKE、SET PASSWORD 或 RENAME USER)间接修改授权表,则 服务器会注意到这些更改,并立即将授权表加载到内存中。 再次立即加载到内存中。
TL;DR
只有在使用 INSERT
、UPDATE
或 DELETE
等语句直接修改授予表时,才应使用 FLUSH PRIVILEGES;
。
仅举几个例子。假设你修改了一个名为 ';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 等账户管理语句间接修改授权表,服务器会注意到这些更改,并立即将授权表重新加载到内存中。