Diagnóstico de la tabla de usuarios
En los últimos tiempos he notado una serie de artículos en las listas y foros hablando de problemas de conexión y con la cuentas de usuarios. Muchos de estos problemas tienen algún tipo de relación con la definición de estas cuentas. El objetivo de este artículo es mostrar como examinar la tabla de usuarios para entender su funcionamiento básico para diagnosticar, y posiblemente descartar, los problemas más sencillos. Antes que nada ...
... es necesario diagnosticar si es posible conectarse al servidor. Para esto se debe usar el utilitario mysqladmin de acuerdo a las instrucciones en la sección 2.4.15.2.3. del manual.
mysql: En este caso se deben usar los comandos CREATE USER y/o GRANT. La sintáxis está explicada en la sección 5.9.2 del manual. Los parámetros más significativos son: user - nombre de usuario, host - identificación de la terminal de donde viene la conexión y password - clave de usuario.
MySQL Administrator: En este caso es la interfase es suficientemente intuitiva y solo se deben seguir las instrucciones en pantalla. Por defecto el usuario root está habilitado solo para conectarse a la BD en servidor (localhost). Los demás usuarios, por defecto, pueden conectarse desde cualquier terminal. En este caso, que un usuario solo pueda conectarse desde una terminal determinada (o grupo), se debe especificar el host: se debe hacer click con el botón de la izq del mouse y especificar la terminal o conjunto de terminales usando el caracter '%' como comodín. por ejemplo: usuario@%, usuario@192.168.1.%, usuario@servidor_%, usuario@servidor_uno.
Password: Que pasa cuando uno se olvidó de la password? En el caso que éste problema sea con la cuenta root, se debe correr el servidor sin seguridad usando la opción --skip-grant-tables. A partir de ahi se puede usar los procedimientos descriptos en el siguiente párrafo.
La mejor forma de resolver este problema es reestablecer la password de un usuario con el comando:
SET PASSWORD FOR 'usuario'@'%' = PASSWORD('clave_usuario'); 'usuario', '%' y 'clave_usuario' deben ser reemplazados por los valores adecuados. Los detalles a los que se debe prestar atencion aquí son '%' y la función PASSWORD(). El primero es necesario para describir el grupo de servidores para los cuales se aplica el cambio. La función PASSWORD() se ocupa de encriptar en forma adecuada la clave de usuario. Los resultados se pueden probar conectandose desde un 2o cliente, preferentemente desde una terminal distinta sin desconectar el cliente desde se estan modificando los datos.
Soluciones
a. Una de las areas en las que se presentan problemas frecuentemente es en el hecho que si se especifica el host como '%', esto no implica que incluya 'localhost'. O sea, que será posible conectar al usuario en forma remota, pero no local. Se requiere una entrada para 'localhost' y otra para los servidores remotos. Por defecto MySQL Administrator crea los usuarios con 'localhost' como host. Agregar nuevos hosts no es intuitivo, pero es más sencillo usando la herramienta gráfica:
b. Alternativa usando ssh. En este caso se está creando una conexión encriptada mediante el re-direccionamiento de puertos, o túnel. El servidor MySQL verá a la conexión como local y no como remota. En este caso todos los usuarios deben tener 'localhost'
c. Especificando nombres de servidores. La forma más común de especificar un PC desde donde un usuario puede comunicarse es mediante el nombre. Si el nombre de las terminales desde donde se conectarán los usuarios tienen un nombre compuesto con algunos caracteres en común, es posible usar el caracter '%' como comodín. Por ejemplo: '%' implica autorizar la conexión desde cualquier terminal remota; 'term%' implica autorizar la conexión desde cualquier terminal remota cuyo nombre empiece con 'term' (term_of1, term_of2, etc). En este caso, si MySQL no puede resolver el nombre de la terminal, la conexión no se podrá establecer. De ser posible, es preferible especificar direcciones de IP, por ejemplo: 192.168.1.%.
Finalmente, mucha de la información presentada acá puede ser usada para detectar problemas con la seguridad. Algunos ejemplos que recomiendo revisar son:
Espero que esta información les haya servido como punto de entrada para diagnosticar las conexiones. Esto no implica que existan problemas más complicados, pero lo dejo para otra ocasión. Hasta la próxima.
Antes que nada ...
... es necesario diagnosticar si es posible conectarse al servidor. Para esto se debe usar el utilitario mysqladmin de acuerdo a las instrucciones en la sección 2.4.15.2.3. del manual.Como definir las cuentas de usuarios
Es posible definir usuarios usando el cliente interactivo (mysql) o el cliente gráfico (MySQL Administrator).mysql: En este caso se deben usar los comandos CREATE USER y/o GRANT. La sintáxis está explicada en la sección 5.9.2 del manual. Los parámetros más significativos son: user - nombre de usuario, host - identificación de la terminal de donde viene la conexión y password - clave de usuario.
MySQL Administrator: En este caso es la interfase es suficientemente intuitiva y solo se deben seguir las instrucciones en pantalla. Por defecto el usuario root está habilitado solo para conectarse a la BD en servidor (localhost). Los demás usuarios, por defecto, pueden conectarse desde cualquier terminal. En este caso, que un usuario solo pueda conectarse desde una terminal determinada (o grupo), se debe especificar el host: se debe hacer click con el botón de la izq del mouse y especificar la terminal o conjunto de terminales usando el caracter '%' como comodín. por ejemplo: usuario@%, usuario@192.168.1.%, usuario@servidor_%, usuario@servidor_uno.
Como revisar las cuentas de usuarios
Esta parte es relativamente fácil. Primero hay que conectarse a la base de datos usando el cliente interactivo (mysql) o el cliente GUI (MySQL Browser) como usuario root. Una vez conectado, hay que asegurarse que estamos usando la base de datos mysql con el comando:A continuación hay que ejecutar el siguiente query:use mysql
El resultado tiene toda la información necesaria a los efectos de este artículo.SELECT user, host, password FROM user;
Problemas potenciales
Ahora viene la parte interesante. Los problemas más comunes estan relacionados con la password o la definición de los hosts. Ejemplos incluyen password que cayeron en el olvido, hosts definidos en forma ambigua, problemas con el DNS, etc.Password: Que pasa cuando uno se olvidó de la password? En el caso que éste problema sea con la cuenta root, se debe correr el servidor sin seguridad usando la opción --skip-grant-tables. A partir de ahi se puede usar los procedimientos descriptos en el siguiente párrafo.
La mejor forma de resolver este problema es reestablecer la password de un usuario con el comando:
SET PASSWORD FOR 'usuario'@'%' = PASSWORD('clave_usuario'); 'usuario', '%' y 'clave_usuario' deben ser reemplazados por los valores adecuados. Los detalles a los que se debe prestar atencion aquí son '%' y la función PASSWORD(). El primero es necesario para describir el grupo de servidores para los cuales se aplica el cambio. La función PASSWORD() se ocupa de encriptar en forma adecuada la clave de usuario. Los resultados se pueden probar conectandose desde un 2o cliente, preferentemente desde una terminal distinta sin desconectar el cliente desde se estan modificando los datos.
Soluciones
a. Una de las areas en las que se presentan problemas frecuentemente es en el hecho que si se especifica el host como '%', esto no implica que incluya 'localhost'. O sea, que será posible conectar al usuario en forma remota, pero no local. Se requiere una entrada para 'localhost' y otra para los servidores remotos. Por defecto MySQL Administrator crea los usuarios con 'localhost' como host. Agregar nuevos hosts no es intuitivo, pero es más sencillo usando la herramienta gráfica:- Seleccionar el usuario deseado
- Presionar el botón derecho del mouse
- Seleccionar la opción para cambiar el host
- Especificar el host o familia de hosts usando el caracter comodín ('%')
b. Alternativa usando ssh. En este caso se está creando una conexión encriptada mediante el re-direccionamiento de puertos, o túnel. El servidor MySQL verá a la conexión como local y no como remota. En este caso todos los usuarios deben tener 'localhost'
c. Especificando nombres de servidores. La forma más común de especificar un PC desde donde un usuario puede comunicarse es mediante el nombre. Si el nombre de las terminales desde donde se conectarán los usuarios tienen un nombre compuesto con algunos caracteres en común, es posible usar el caracter '%' como comodín. Por ejemplo: '%' implica autorizar la conexión desde cualquier terminal remota; 'term%' implica autorizar la conexión desde cualquier terminal remota cuyo nombre empiece con 'term' (term_of1, term_of2, etc). En este caso, si MySQL no puede resolver el nombre de la terminal, la conexión no se podrá establecer. De ser posible, es preferible especificar direcciones de IP, por ejemplo: 192.168.1.%.
Conclusión
Este documento no pretende hacer un análisis profundo de los distintos problemas que pueden aparecer tratandose de conectar a MySQL, solo ilustrar como diagnosticar y solucionar los problemas más sencillos y comunes. En el proceso he mencionado varios conceptos que recomiendo profundizar, en particular si tienen problemas serios. Tambien estoy mostrando una puerta a la base de datos del sistema, que puede ser de mucha utilidad para los administradores de sistemas.Finalmente, mucha de la información presentada acá puede ser usada para detectar problemas con la seguridad. Algunos ejemplos que recomiendo revisar son:
- Evitar que cualquiera puede parar y volver a arrancar el servidor. De ser así sería posible arrancar sin chequeo de seguridad tal como lo especifique arriba
- No permitiar que el usuario root pueda acceder desde terminales remotas. Si fuera posible, un ataque remoto pasaría desapercivido. De necesitar permitir esto, considerar conectarse mediante ssh.
- De ninguna manera dejar al usuario root sin password. Este es el error más frecuente, que combinado con el anterior (permitir conexiones remotas) sería nada menos que desastroso. Aunque parezca mentira esto se presenta con bastante frecuencia.
Espero que esta información les haya servido como punto de entrada para diagnosticar las conexiones. Esto no implica que existan problemas más complicados, pero lo dejo para otra ocasión. Hasta la próxima.
Labels: mysql software




0 Comments:
Post a Comment
<< Home