lunes, marzo 04, 2013

Mysql crear base de datos, usuario y asignar permisos

Es bastante habitual que en desarrollo web o en cualquier otro tipo de aplicación que utilice una base de datos MySQL necesitemos crear una base de datos de acceso limitado. Una buena práctica para no evitar problemas de seguridad es, al mismo tiempo, crear un usuario que tendrá un acceso total pero limitado únicamente a esa BD.

Podemos hacerlo con unas pocas instrucciones. Primero accedemos a nuestra base de datos con el usuario root:

$ mysql -u root -p

Seguidamente el sistema nos pedirá la contraseña del usuario root y si se la introducimos correctamente veremos la línea de comandos de la consola MySQL


Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1213049
Server version: 5.0.96-0ubuntu3 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Antes de crear la base de datos puede que queramos echar un vistazo a las que ya tenemos para comprobar si usamos algún sistema de nombres. 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| espais             | 
| europa             | 
| inventario         | 
| mostrari           | 
| mouton             | 
| mua                | 
| mysql              | 
+--------------------+

El siguiente paso es crear la base de datos. Algo tan sencillo como:

mysql> create database database_name;
Query OK, 1 row affected (0.10 sec)

La parte más sencilla de creación de base de datos ya está lista. Ahora crearemos un usuario que tenga derechos totales sobre la misma y que es el que utilizaremos en nuestra aplicación. En mi caso un Wordpress.

mysql> create user tu_usuario identified by 'tu_password';
Query OK, 0 rows affected (0.13 sec)

Este es el momento de apuntar tu usuario y contraseña. Luego no digas que se te ha pasado. Yo suelo usar una buena contraseña generada y almacenada con KeePass para Ubuntu.

Para garantizar permisos totales sobre la base de datos recién creada al usuario el comando sería:

mysql> grant all privileges on tu_base_de_datos.* to usuario;
Query OK, 0 rows affected (0.00 sec)

Ahora deberías salir y probar con tu nuevo usuario a crear/borrar una tabla:

mysql> exit;
Bye
$ mysql -u usuario -p base_de_datos
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
.
.
.
mysql> create table tb_prueba (id int);
Query OK, 0 rows affected (0.03 sec)

mysql> drop table tb_prueba;
Query OK, 0 rows affected (0.00 sec)

Si has podido llevar a cabo las operaciones anteriores. Tu usuario y base de datos están listas para usar.


9 comentarios:

  1. Muchas gracias por el post, tenia problemas a la hora de asociar un usuario a una BD desde la interfaz grafica, y siguiendo tus pasos pude hacerlo a la primera desde SSH. :)

    ResponderEliminar
  2. MUY BUENO, MUY BIEN EXPLICADO! GRACIAS.

    ResponderEliminar
  3. Recomiendo libre MySQL-manager - Valentina estudio, échale un vistazo si no has probado todavía: http://www.valentina-db.com/valentina-studio-overvie

    ResponderEliminar
  4. como hago para cargar una db de respaldo que tengo en mi equipo en una base de datos recien creada?

    ResponderEliminar
    Respuestas
    1. Tan sencillo como llamar al mysql con la opción "< archivorespaldo.sql" desde la línea de comandos

      $mysql -u tu_usuario -p nombre_bd < archivo_respaldo.sql

      Por ejemplo:


      Tienes la documentación completa aquí http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

      Eliminar
  5. Buen articulo. De vez en cuando siempre vuelvo por aquí a mirar la 'chuleta'. Si me permites, cuando creas la base de datos yo añadiría.

    create database database_name
    default character set utf8
    default collate_general_ci;

    http://elpequenobuda.blogspot.com

    ResponderEliminar
  6. hola amigo muy util el tutorial. tengo una duda restaure una base de datos. pero no me dijeron el usuario. es posible visualizar la contraseña? intente poner una que tengo en mi base de datos pero la aplicacion no la reconoce.

    ResponderEliminar
    Respuestas
    1. No, no se puede recuperar una contraseña de MySQL. Si tienes acceso de administración puedes reescribir la contraseña de un usuario.

      Eliminar