Cuando creo nuevas tablas y un usuario para acompañarlas, normalmente sólo invoco los siguientes comandos:
CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY "mypassword";
Nunca he necesitado utilizar el comando FLUSH PRIVILEGES
después de ejecutar los dos comandos anteriores. Los usuarios pueden iniciar sesión y utilizar su base de datos y ejecutar scripts PHP que se conectan a la base de datos sin problemas. Sin embargo, veo este comando utilizado en casi todos los tutoriales que miro.
¿Cuándo es realmente necesario el comando FLUSH PRIVILEGES
y cuándo es innecesario?
Los privilegios asignados a través de la opción GRANT no necesitan FLUSH PRIVILEGES para tener efecto - el servidor MySQL notará estos cambios y recargará las tablas grant inmediatamente.
Si modifica las tablas grant directamente usando sentencias como
INSERT, UPDATE, o DELETE, sus cambios no tendrán efecto en la comprobación de privilegios hasta que reinicie el servidor o le diga que recargue las tablas. tablas. Si cambia las tablas de concesión directamente pero olvida recargarlas sus cambios no tendrán efecto hasta que reinicie el servidor. Esto puede hacer que se pregunte por qué sus cambios parecen no tener ningún efecto.
Para decirle al servidor que recargue las tablas de concesión, ejecute un comando operación de vaciado de privilegios. Esto se puede hacer mediante la emisión de un FLUSH PRIVILEGES o ejecutando un comando mysqladmin flush-privileges o mysqladmin reload. > Si modifica las tablas de permisos indirectamente usando sentencias account-management sentencias como GRANT, REVOKE, SET PASSWORD, o RENAME USER, el servidor se da cuenta de estos cambios y carga las tablas de concesión en memoria inmediatamente.
TL;DR
Deberías usar FLUSH PRIVILEGES;
sólo si modificas las tablas grant directamente usando sentencias como INSERT
, UPDATE
, o DELETE
.
Por poner algunos ejemplos. Digamos que modifica la contraseña de un usuario llamado 'alex'. Puedes modificar esta contraseña de varias maneras. Por ejemplo:
mysql> update* user set password=PASSWORD('test!23') where user='alex';
mysql> flush privileges;
Aqui usaste UPDATE. Si utilizas INSERT, UPDATE o DELETE en tablas grant directamente necesitas utilizar FLUSH PRIVILEGES para recargar las tablas grant.
O puede modificar la contraseña así:
mysql> set password for 'alex'@'localhost'= password('test!24');
Aquí no es necesario utilizar "FLUSH PRIVILEGES;" Si modifica las tablas de permisos indirectamente mediante sentencias de gestión de cuentas como GRANT, REVOKE, SET PASSWORD o RENAME USER, el servidor se da cuenta de estos cambios y vuelve a cargar las tablas de permisos en memoria inmediatamente.