Resulta que crear un usuario de mysql con acceso desde hosts remotos no es tan intuitivo como podría pensarse. Durante la creación de un usuario en mysql, ya sea con el comando apropiado o mediante utilidades como «mysql_setpermission», se debe indicar si el usuario mysql podrá conectar con el motor SQL únicamente desde el localhost, o si por el contrario, tendrá acceso desde un host remoto específico o desde cualquier host (%).
Sin embargo, para que el acceso remoto funcione, deberá crearse primero el usuario localhost y posteriormente el mismo usuario para %:
mysql> create user ‘readonly’@’localhost’ identified by ‘mipassword’;
Query OK, 0 rows affected (0.00 sec)mysql> grant select on *.* to ‘readonly’@’localhost’;
Query OK, 0 rows affected (0.00 sec)mysql> create user ‘readonly’@’%’ identified by ‘mipassword’;
Query OK, 0 rows affected (0.00 sec)mysql> grant select on *.* to ‘readonly’@’%’;
Query OK, 0 rows affected (0.00 sec)
Esto se puede leer en la documentación oficial de MySQL:
«It is necessary to have both accounts for monty
to be able to connect from anywhere as monty
.»
Con estas instrucciones se habrá creado un usuario llamado «readonly» con únicamente permisos de lectura (selects) contra todas las bases de datos existentes, tanto desde el host local como desde cualquier otro host remoto.
Si además queremos que este usuario pueda realizar backups de las bases de datos, debemos agregarle LOCK TABLES a sus privilegios (sobre las bases que queramos, o todas *.*)
Como medida de seguridad (sobre todo para scripts de backup) es bueno tener un usuario de sólo lectura, pero que pueda hacer estas funciones.
Buen post.
Salu2!
Gracias Sergio.
Tengo pendiente un post que explica un poco el funcionamiento de mysqlhotcopy (algo así como un mysqldump para tablas myisam), el cual requiere precisamente, como dices, agregar al usuario de backup el LOCK TABLES además del RELOAD.
En cuanto pueda lo subo.
¡Un saludo!
Excelente me ha ayudado bastante gracias, Saludos.