lunes, 15 de octubre de 2007

Bases de Datos MYSQL

Instalación de mysql server:


aptitude install mysql-server-5.0 mysql-client-5.0


Archivo de configuracion de mysql esta en:



/etc/mysql/my.cnf


renombrar la linea

bind-address = 127.0.0.1

para poderse conectar desde cualquier lado, tambien se puede colocar la ip desde donde queremos que se conecte solamente


mysql-query-browser: cliente grafico para conetarse a las bases de datos, tambien se puede usar phpmyadmin, abrimos un navegador colocamos el nombre o la ip del servidor seguido de /phpmyadmin

El usuario root de mysql por defecto tiene la clave en blanco por lo que es primordial colocarle una inmediatamente despues de instalar mysql

Coloque una clave para el usuario root de MySQL cuando ingrese desde localhost en la consola (no recomendado) con:


/usr/local/bin/mysqladmin -u root password 'nueva-clave'


Recordemos limpiar el historial para que no quede ese ultimo comando grabado y se pueda ver la contraseña:


history -c


- Desde el mysql (Recomendado):
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> UPDATE user SET Password=PASSWORD('password') WHERE user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql>

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql>

mysql> quit
bye


Ahora que asignamos una contraseña al usuario root comprobaremos que ya no puede acceder sin la contraseña:


$mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)


Para poder acceder como usuario "root" haremos uso del parametro "-p" para usar validación por contraseña:


$mysql -u root -p
Enter password:

De esta manera solo podras acceder como root con una contraseña

Ahora comprobamos con esto:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

mysql> SELECT host,user,password FROM user;
+-----------+------+------------------+
| host | user | password |
+-----------+------+------------------+
| localhost | root | 565491d704013245 |
+-----------+------+------------------+
1 row in set (0.00 sec)

mysql>
Como podemos ver, el usuario "root" desde 'localhost' necesita contraseña (la cual se muestra cifrada) para acceder, lo cual es recomendable.


Nuevamente refrescamos los privilegios así:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Y salimos:
mysql> quit
bye


Ahora mencionaremos una medida mas de seguridad la cual también es recomendable y consiste en cambiar el nombre por default de la cuenta administrador de mysql (root), a algun nombre diferente que pueda ser mas difi­cil de adivinar. Este cambio hara mas dificil utilizar un ataque de fuerza bruta o con diccionario a la cuenta de administrador. En tal caso el intruso tendra que adivinar el password, pero primero el nombre de la cuenta de administrador, esto se hace así­:

mysql> use mysql;
mysql> update user set user="mydbadmin" where user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit

Ahora como ultimo test apagaremos el servicio mysqld así­:


# /etc/rc.d/rc.mysqld stop


Y comprobaremos que lo podamos reiniciar con:


# /etc/rc.d/rc.mysqld start


Bien, ahora nuestro servidor MySQL ya está correctamente instalado y configurado con las medidas de seguridad apropiadas.

Finalmente debemos de eliminar el contenido del historial de MySQL (~/.mysql_history), en el cual todos los comandos SQL ejecutados han sido almacenados (especialmente passwords, los cuales son almacenados en texto plano).


$ cat /dev/null > ~/.mysql_history

NOTA: Como podemos ver en el comando anterior, fue ejecutado como usuario normal, ya que las tareas de cambiar contraseñas fueron hechas con un usuario normal.

*NOTA: este procedimiento deberá de ser aplicado para todas las cuentas con las que se ha estado trabajando (si es que si hicieron las pruebas con un usuario normal y con el usuario root del sistema).





Crear una cuenta de usuario en la base de datos:



mysql> GRANT ALL ON basededatos.* TO ‘user’@'hosts’ IDENTIFIED BY ‘pass’;


donde host puede ser la ip de la maquina que se va a conectar


Algunas operaciones usuales del administrador son:


SHOW DATABASES;

muestra todas las bases disponibles.


USE base1;

permite usar la base base1.


SHOW TABLES;

que muestra todas las tablas de la base activa.


DESCRIBE tabla;
SHOW CREATE TABLE tabla;
que presentan estructura de la tabla.


Crear base de Datos:


create database nombre_de_bdd


Remplazar base de datos:



~# mysql -u root -p nombre_bdd < /ruta/nueva_bdd/ bdd.sql



Realizar dump (respaldo de la bdd):


mysqldump -u root -p nombre_bdd > nombre_del_respaldo.sql


y posteriormente restaurarla con:


#mysql < /respaldomysql/nombre_del_respaldo.sql

Para sacar una copia de respaldo de todas las bases de datos con:


# mysqldump --force -p --all-databases > /respaldomysql/dump-1nov2007.sql


y posteriormente restaurarla con:


# mysql < /respaldomysql/dump-1nov2007.sql Mas ayuda en: