Mysql en Castellano

Notas, noticias y comentarios sobre MySQL en idioma castellano.

My Photo
Name: GN
Location: Bellevue, Washington, United States

Tuesday, January 16, 2007

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.

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:
use mysql
A continuación hay que ejecutar el siguiente query:
SELECT user, host, password FROM user;
El resultado tiene toda la información necesaria a los efectos de este artículo.

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:

  1. Seleccionar el usuario deseado
  2. Presionar el botón derecho del mouse
  3. Seleccionar la opción para cambiar el host
  4. 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:

  1. 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
  2. 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.
  3. 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:

Friday, September 29, 2006

Podcast #3: Chau MySQL v4.0, hola Connector/.NET 5.0

Una vergüenza que tarde tanto en hacer un podcast, pero sigo intentandolo. El resúmen de las novedades más importantes:

  1. Fin del ciclo de vida de la versión 4.0 de MySQL
  2. Publicación del Connector/.NET 5.0
  3. Slides del Webinar en español sobre Alta Disponibilidad
  4. Email Warehouse (ver artículo anterior)
Hasta la próxima.

Archivo MP3

Depósito de Emails

Durante un tiempo estuve buscando una herramienta para guardar los emails en una base de datos y poder usar SQL para buscar por contenido, recipiente, remitente, fecha (or rango), etc. Busqué en Sourceforge y Freshmeat, busqué con Google y no encontré nada específico. Encontré servidores de email con una base de datos, encontré clientes, pero ninguno tenía la información organizada para ser un verdadero depósito (datawarehouse). Entonces decidí empezar un proyecto yo mismo. Voy a compartir el proceso con Uds y espero recibir algunas ideas. Ni bien haya empezado a tomar forma lo voy a publicar en http://forge.mysql.com y aceptar contribuciones. Bueno acá va.

Descripción

Armar una base de datos para depositar emails con el fin de realizar consultas complejas con lenguaje SQL. La base de datos tiene que contar con un master y un esclavo. El master tomará la información del cliente de email principal y replicará los mensajes al esclavo. Estoy pensando que el master será mi máquina de escritorio y my esclavo será mi laptop.

El sistema tendrá que ser independiente del sistema operativo y deberá poder tomar los emails de la mayor cantidad de clientes posibles.

Lenguajes: Perl y C#

Esta es con seguridad la parte más controvertida del proyecto. Hasta me cuesta a mi mismo llegar a una conclusión final. Por el momento voy a mantener todo como será descripto acá.

La orientación a objetos de ambos es muy importante, mantiene el código muy simple y limpio. Usaré Perl para la interacción con la BD. Es muy fácil escribir pequeños scripts rápidos de probar. El C# (.NET o Mono) es mucho más flexible para la interfase de usuarios. El desafío será desarrollar la mayoría del código Perl en Linux y el código C# en Windows y después juntar todo. Pero falta mucho para ese momento.

Diseño conceptual del Sistema

Este post es muy temprano para publicar un esquema, pero acá van las ideas principales para la versión 0.1:

  • Empezar usando MySQL 5.0. No hay ninguna razón para no usar 5.1 que el hecho de no tenerlo instalado en mi desktop.
  • Mantener todos los componentes lo más simple posible. Por ejemplo, en la 1a versión todo será codificado, nada de parámetros. Todo se manejará con scripts sueltos para verificar la lógica inicial.
  • En la base de datos inicial solo se registrará el remitente de cada email. Los campos "To:" y "Cc:" se guardaran como campo de texto variable para evitar las complicaciones de las relaciones muchos a muchos en la BD en la 1a versión.
  • Los objetos MIME se guardaran como BLOBS y se extraeran a archivos. No se incluirá inteligencia para adminstrar el contenido.
  • La versión inicial no usará SPROCS o Triggers.

Conclusión

Aunque se trata de un proyecto bastante limitado servirá para probar los conceptos más básicos y construir a partir de allí. Esto también lo tomo como ejercicio en el uso de MySQL, en particular utilizar las características más avanzadas.

Hasta la próxima.

Wednesday, July 12, 2006

Resucitó el podcast

Finalmente decidí que el podcast es más adecuado para noticias y comentarios rápidos. Para las notas con detalles, es mucho mejor un blog. Un podcast minucioso lleva mucho tiempo para producir, y para cuando está terminado, basta con copiar el guión en un blog. Los invito a dejar sus comentarios e ideas. Tambien, si alguno se ofrece a mandarme efectos sonoros, cortinas musicales, etc.; prometo revisarlas y usarlos dandole crédito a los autores correspondientes.

La segunda razón para resucitarlo fueron 2 herramientas nuevas: CastBlaster y FeedBurner. CastBlaster permite generar el mp3 en forma realmente fácil, y FeedBurner se ocupa de tomar el 'feed' de Blogger y encapsularlo con el audio y una serie adicional de herramientas muy útiles.

Para suscribirse al podcast y/o al blog, hagan click en el ícono del feed a la izquierda. De esta manera figurarán en las estadísticas y tendré una idea para donde llevar el contenido.

Hasta la próxima.

Archivo MP3

Thursday, June 29, 2006

Que Linux usar?

Hace unas semanas decidí que era hora que una de mis PCs en casa ya no aguantaba con la instalación de Linux que tenía y tenía que tomar alguna medida para estabilizarla. El tema empezó cuando decidí reemplazar W98 por Knoppix hace aproximadamente 2 años. Durante este tiempo fui actualizando el SO con los repositorios de Debian y funcionando con un kernel compilado por mi para acelerar la performance (es un viejo PIII). El resultado después de 2 años es que ya nadie sabe que está corriendo, que sobra, que falta, etc. Durante una ausencia reciente de casa, tuve varios reclamos de mis hijos sobre la confiabilidad de la PC ... lo cual me hizo pensar que tal vez era hora de reemplazar la instalación completa por alguna como la gente y mantenerla estable. La experiencia ganada durante este tiempo, más los adelantos en las distribuciones actuales hicieron que esta decisión fuera obvia.

Que distribución usar?

Esta fue la parte difícil. Los criterios que seguí son:
  1. Tiene que ser una de las distribuciones populares para poder conseguir soporte de la comunidad y dentro de la misma companía
  2. Tiene que incluir las últimas versiones de MySQL
  3. Tiene que tener un desktop amigable e incluir todos los utilitarios básicos para usuarios casuales adolescentes
  4. No tiene que haber curva de aprendizaje para mi familia

Durante los últimos 2 años he seguido el progreso de las distintas distribuciones a través de Distrowatch, por lo que las distribuciones finalistas fueron: Kubuntu, SuSE 10.1 y DSL. Aunque DSL me daba la ventaja de poder preparar la PC como yo quisiera, tenía la desventaja que requería mucho trabajo de mi parte.

Kubuntu: Ubuntu ha progresado mucho en los últimos tiempos, sobre todo en el grado de refinamiento de la 'usabilidad', por lo que se convirtió en mi favorito entre los Linux que surgen de los LiveCD en reemplazo de Knoppix. Hace poco, después del lanzamiento de la últimas versión estable, se lo presenté a mi hermano como una alternativa a Windows. La velocidad con la que el consiguió instalarlo en su PC y empezar a trabajar con él fue suficiente prueba para mi que es lo suficiente maduro y sencillo para mis propósitos.

Open SuSE 10.1: En mi PC de trabajo estoy usando la versión 10.0 y me impresionó en forma muy positiva la sofisticación del desktop y la evolución de Yast, tanto en su versión gráfica como la interface textual. Yast ha evolucionado al punto de hacer la administración del software en la PC muy sencillo.

Cual fue la decisión?

Realmente no podía elegir uno u otro y mi hermano me convenció que debía instalar Kubuntu así ambos teníamos el mismo software y podíamos compartir la experiencia. Mi primer intento entonces fue con Kubuntu desde el DVD. Descubrí rapidamente que para equipos tan viejos como el mio (casi 6 años) aunque la BIOS soporte arrancar desde DVD, no quiere decir que lo haga. Después de bajar los CD volví a probar, solo para descubrir un problema en el script de intalación después de varios intentos. Sin paciencia para reportar el bug y esperar por una solución, instalé SuSE 10.1 desde CDs. Aunque tomó mucho tiempo, terminó con éxito. Fue la primera vez que veo una distribución de origen comercial que reconoce todo el hardware en la PC e instala los drivers sin chistar en el primer intento.

Como terminó la historia?

En ambos casos, los repositorios default no incluyen paquetes de software que yo uso con frecuencia: mplayer (con los codecs para wma), Azureus y ClamAV entre otros. Para SuSE 10.1 está muy bien cubierto en un artículo de Jem Report llamado: Hacking SuSE 10.1. Para Kubuntu, basta con una búsqueda en los forums para encontrar los datos para agregar al archivo /etc/apt/sources.

Qué tiene que ver todo esto con MySQL?

Todo, aunque estoy hablando de mi PC personal, es mi backup de email, documentos y banco de pruebas. No puedo arriesgarme a que una actualización de MySQL rompa alguna configuración o algún otro paquete como PHP, Perl ::DBI u otros. También espero algún día terminar mi proyecto de Datawarehouse para email, en cuyo caso mi repositorio principal sería mi PC de trabajo diario y replicaría a mi PC en casa.

Los veo en la próxima.

Friday, June 23, 2006

Manuales traducidos

Finalmente se han publicado los manuales en español. He revisado algunos de los capítulos y en mi opinión es un excelente trabajo de la gente de Vespito. Los invito a revisar y comentar el contenido en las páginas del manual, esperemos que lo puedan mantener actualizado en la medida que el software progrese. Yo se que están en constante comunicación con el equipo de documentación de MySQL. Con vuestro apoyo, comentando y consultando los manuales, yo sé que este trabajo será priorizado.

En contraste, les invito a visitar el blog de un compañero de trabajo del equipo de documentación (está en inglés). En el comenta sobre las traducciones del manual en forma positiva, pero entre los comentarios verán que un usuario cuestiona la necesidad de publicar la documentación en otro idioma que el inglés. Yo no estoy de acuerdo y ya expuse mi punto de vista con el autor del blog en forma privada. Los invito a dejar sus comentarios sobre la necesidad o no de mantener manuales traducidos en este blog o en el de él.

Los veo en la próxima.

Nota sobre los podcasts: Lamentablemente por varias razones no he podido seguir cumpliendo con los podcasts. Estoy buscando herramientas que me permitan simplificar la producción y reanudarlos lo antes posible.

Thursday, April 27, 2006

Conferencia de Usuarios - Dia 3

Otro día con más contenido y trabajo. Como siempre es tan agotador como interesante y divertido.

Anoche tuve la oportunidad de conocer y compartir una conversación muy interesante con Jim Starkey. Jim es el inventor de conceptos como BLOBs, MVCC y otros que hoy se dan por sentado en el mundo de las bases de datos grandes y medianas.

State of MySQL AB

Como siempre la charla de Marten incluye una buena cantidad de información sobre el estado general de la comunidad y la empresa. Es siempre interesante ver su interpretación de cómo los proyectos de código abierto (Open Source) permiten la existencia de proyectos comerciales viables, ya sea soportando esos proyectos (MySQL, JBoss, PHP, etc)o para empresas que basan sus negocios en los mismos (Google, Yahoo!, Right Now, Travelocity, etc.). Lo que nadie esperó fue que Oracle/InnoDB fue nombrado uno de los partners del año.

Keynotes de Tim O’Reilly y Christine Martino

La charla de Tim O’Reilly realmente fue muy interesante. Su visión privilegiada, a partir de su editorial, realmente muestra un mundo que está cambiando por la interacción entre el mundo virtual y físico (ejemplo: revista Make). Lamentablemente su presentación no funcionó al principio y se perdión parte del impacto deseado. Las estadísticas que presento sobre el final (con la presentación funcionando) tambien fueron muy interesantes, en particular para ilustrar el crecimiento de MySQL, Ruby y donde está la mayor demanda para trabajos relacionados con Web 2.0 (estados de California y Washington).

La charla de Christine no fue tan espectacular como la de O’Reilly, pero no menos informativa. El punto principal fue el nuevo nivel alcanzado entre la asociación entre ambas empresas.

Hall de exhibiciones

Hoy tuve que pasar 2 horas en el hall de exhibiciones en nuestro stand. A pesar de trabajar para la MySQL, estoy impresionado por el volúmen de expositores. Algunos son los sospechosos de siempre: Novell, HP, Red Hat, etc.; otros son un poco sorpresivos: IBM. Lo más interesante fueron los pequeños expositores, tanto el volumen como la calidad de los mismos. Es obvio que existe un muy rico ecosistema alrededor de MySQL que merece ser explorado en detalle.

Lamentablemente no pude asistir a ninguna de las otras charlas hoy, por lo que no tengo comentarios.

Hasta mañana

Tuesday, April 25, 2006

Conferencia de Usuarios - Día 2

Lamentablemente, después de 14hs de trabajo, no tuve la energía de agregar los segmentos de audio que faltan al podcast, prometo seguir tratando aunque dudo que suceda esta semana.

Hoy es un día especial, es mi charla sobre como usar MySQL bajo ambiente Windows (URL). Pero vamos por orden, hoy es tambien el primer día de keynotes incluyendo State of the Dolphin de parte de los fundadores.

State of the Dolphin

Kaj Ärno, el encargado de relaciones con la comunidad, hizo una introducción a los números actuales del tamaño de la comunidad e inmediatamente pasó a charlar con los fundadores, Monty y David. La charla pasó a comentar sobre MySQL 5.0, incluyendo lo bueno, lo malo y lo feo. Pasaron a explicar por que eligieron crear la arquitectura que permite diferentes modos de almacenamiento. En particular ofrece una flexibilidad única de elegir el método más adecuado para cada aplicación. Anunciaron Falcon, cerveza sueca ... tambien el nombre de código de lnuevo motor ACID. Varios otros anuncios siguieron en la charla incluyendo los nuevos motores provistos por la comunidad y otras empresas, lanzando algunos desafíos a la comunidad. En este momento Mike Zinner demostró MySQL Workbench.

Keynotes de RightNow y Business Objects

Excelentes charlas de ambos. La de Greg Gianforte habló sobre como empezar un negocio con nada, repasando como fueron los orígenes de RightNow hasta convertirse en una de las principales companías que provee software para atención de clientes. En el caso Steve Lucas, explicó como usan MySQL como la base Crystalreports.com, el servicio que se ofrece gratis a todos los usuarios registrados de Crystal Reports. Ambos hablaron de la importancia de MySQL para los negocios de ambos.

Mi charla

Aunque he dado ya muchas presentaciones sobre MySQL y otros temas y en varios lenguajes; por alguna razón esta me puso muy nervioso. Lo noté más que nada en el hecho que erraba los slides, llendo para adelante y para atrás. La asistencia no fue mucha y pero hablando con mi esposa, ella me recordó que fue de acuerdo mis expectativas la semana pasada. Ahora estoy esperando el feedback de quienes estuvieron allí. Igual me concentré en demostrar las diferentes herramientas en la secuencia de instalación, configuración, carga y manipulación de datos. Les recomiendo bajar la presentación y probar los utilitarios ustedes mismos. La idea que MySQL solo funciona o que funciona mejor bajo Linux es un mito, estas herramientas y procedimientos lo demuestran.

Otras charlas

Solo pude ir a la charla para DBA de Robin Schumacher y la de Particiones de Philip Antoniades. Ambas llenas de contenido. Los invito a revisar las presentaciones una vez que se publiquen en el site del evento.

Notas adicionales

* El show room es aproximadamente el doble del año pasado y está completamente vendido.
* La charla de State of Dolphin estuvo llena y con gente parada al fondo.
* Actualmente hay más de 1700 personas en el evento, más que el total del año pasado.