3 manual de gestion de seguridad en base de datos mysql

Page 1

MANUAL DE GESTIÓN DE SEGURIDAD EN BASES DE DATOS MYSQL La seguridad es Fundamental en cualquier entorno que nos rodea, en una base de datos es un mecanismo fundamental debido a toda la información que se almacena en ella ya que está expuesto a cualquier tipo de amenaza. Este Manual es basado en ideas de estudiantes con el fin de transmitir un conocimiento fácil de aprendizaje para los usuarios que lo necesiten.  Como primer paso es crear una Base de datos para esto utilizamos la siguiente sentencia CREATE DATABASE más el nombre de nuestra base de datos por ejemplo: CREATE DATABASE MANUALSEGURIDADMYSQL  Lo siguiente sería crear una contraseña para tu base de datos si en caso tal lo ve necesario, pero cabe mencionar que esto es muy importante por la gestión de usuario de la Base de datos. Para esto utilizamos la siguiente sentencia,: DATABASEPASSWORD '<12345 >' Debido a que las tablas de MySQL se almacenan como archivos, es fácil hacer una copia de seguridad. Para hacer una copia consistente haga un LOCK TABLES en las tablas relevantes, seguido de un FLUSH TABLES para las tablas. Solo necesita obtener un bloqueo de lectura; esto permite a otros clientes continuar consultando la tabla mientras usted está haciendo una copia de los archivos del directorio de la base de datos. La sentencia FLUSH TABLES es necesaria para asegurarse de que todas las páginas de índice activas se escriben al disco antes de que comience la copia. Si quiere hacer una copia de una tabla a un nivel SQL, puede utilizar SELECT INTO ... OUTFILE o BACKUP TABLE. Para SELECT INTO ... OUTFILE, el archivo de salida no debe existir previamente. Esto también es cierto para BACKUP TABLE, ya que permitir que archivos externos sean sobreescritos sería un riesgo de seguridad.


Otra técnica para hacer copias de seguridad de una base de datos es utilizar el programa mysqldump o el script mysqlhotcopy script. 1. Hacer una copia completa de su base de datos: shell> mysqldump --tab=/path/to/some/dir --opt db_name shell> mysqlhotcopy db_name /path/to/some/dir También puede simplemente copiar todos los archivos de tablas (*.frm, *.MYD, y *.MYI) siempre que el servidor no esté actualizando nada. El script mysqlhotcopy utiliza este método. (Pero tenga en cuenta que estos métodos no funcionan si su base de datos contiene tablas InnoDB. InnoDB no almacena los contenidos de las tablas en directorios de base de datos, y mysqlhotcopy funciona solo para tablas MyISAM e ISAM.) 2. Pare mysqld si se está ejecutando, y después reinícielo con la opción --logbin[=file_name]. Los archivos binarios de registro le dan la información que necesita para replicar los cambios que se han producido en la base de datos tras el punto en que usted ejecutó mysqldump. Para las tablas InnoDB es posible realizar una copia de seguridad en línea que no requiere bloqueos en las tablas. MySQL tiene soporte para copias de seguridad incrementales: Usted necesita iniciar el servidor con la opción --log-bin para activar el registro binario. En el momento en que usted quiera realizar una copia de seguridad incremental (que contenga todos los cambios que han ocurrido desde la última copia de seguridad, completa o incremental), usted debe rotar el registro binario utilizando FLUSH LOGS. Hecho esto, necesita copiar a la localización de seguridad todos los registros binarios que daten desde el momento de la última copia de seguridad hasta el último. Estos logs binarios son la copia de seguridad incremental; cuando necesite restaurar la copia, los puede aplicar tal como se explica más adelante. La próxima vez que haga una copia de seguridad completa, también


debe rotar el registro binario haciendo FLUSH LOGS, mysqldump -- flush-logs, o mysqlhotcopy --flushlogs. Si su servidor MySQL es un servidor esclavo de replicación, entonces independientemente del método de copia de seguridad que elija, también debe copiar los archivos master.info y relay-log.info cuando copie los datos de su esclavo. Estos archivos son siempre necesarios para continuar la replicación después de una restauración de los datos del esclavo. Si su esclavo está replicando comandos LOAD DATA INFILE, debería también copiar cualquier archivo SQL_LOAD-* que pueda existir en el directorio especificado por la opción --slave-load-tmpdir. (Esta localización es por defecto el valor de la variable tmpdir, si no se especifica.) El esclavo necesita estos archivos para reiniciar la replicación de cualquier operación LOAD DATA INFILE interrumpida. Si tiene que restaurar tablas MyISAM, intente recuperarlas utilizando REPAIR TABLE o myisamchk - r primero. Esto debería funcionar en el 99.9% de los casos. Si myisamchk falla, intente el siguiente procedimiento. Tenga en cuenta que solo funciona si tiene activado el registro binario iniciando el servidor MySQL con la opción --log-bin. 1. Restaure la copia de seguridad original de mysqldump, o la copia de seguridad binaria. 2. Ejecute el siguiente comando para ejecutar de nuevo las actualizaciones de los registros binarios: shell> mysqlbinlog hostname-bin.[0-9]* | mysql En algunos casos, quizá quiera reejecutar solo ciertos registros binarios, desde ciertas posiciones (lo usual es querer reejecutar todos los registros binarios desde el punto de restauración, excepto, posiblemente, algunas sentencias incorrectas). También puede hacer copias de seguridad selectivas de archivos individuales: • Para volcar la tabla, utilice SELECT * INTO OUTFILE 'file_name' FROM tbl_name.


• Para recargar la tabla, restáurela con LOAD DATA INFILE 'file_name' REPLACE ... Para evitar registros duplicados, la tabla tiene que tener un índice PRIMARY KEY o UNIQUE. La palabra clave REPLACE hace que los viejos registros sean reemplazados con los nuevos cuando un nuevo registro tiene la misma clave que uno antiguo. Si tiene problema de rendimientos con su servidor mientras realiza copias de seguridad, una estrategia que puede ayudarle es crear replicación y hacer las copias de seguridad en el esclavo en vez de en el maestro. Si está utilizando un sistema de ficheros Veritas, puede hacer una copia de seguridad así: 1. Desde un programa cliente, ejecute FLUSH TABLES WITH READ LOCK. 2. Desde otra línea de comandos, ejecute mount vxfs snapshot. 3. Desde el primer cliente, ejecute UNLOCK TABLES. 4. Copie los archivos de la captura (snapshot). 5. Desmonte la captura. Un método muy utilizado utilizado para crear copias de seguridad de MySQL se basa en el uso del comando mysqldump. Este comando se incluye dentro de las utilidades del propio servidor MySQL, por lo que ya se instaló cuando instalaste MySQL. Para comprobar que dispones de mysqldump, abre una consola de comandos y ejecuta lo siguiente: $ mysqldump # para comprobar la versión instalada $ mysqldump --version mysqldump Ver 10.XX Distrib 5.X.XX Si se produce un error de tipo "command not found", es posible que no hayas instalado MySQL correctamente o que tengas que indicar la ruta completa hasta donde se encuentre el comando, como por ejemplo:


$ /usr/local/mysql/bin/mysqldump

Copia de seguridad básica Ejecuta el siguiente comando para realizar una copia de seguridad completa de la

base

de

datos

llamada

NOMBRE_BASE_DE_DATOS.

No

olvides

reemplazar TU_USUARIO y TU_CONTRASEÑA por las credenciales que utilizas para acceder al servidor de base de datos: $ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA NOMBRE _BASE_DE_DATOS > copia_seguridad.sql Si por ejemplo el usuario es root, la contraseña también es root y la base de datos se llama acme, el comando que debes ejecutar es el siguiente: $ mysqldump --user=root --password=root acme > copia_seguridad.sql Si por motivos de seguridad no quieres escribir la contraseña como parte del comando, puedes reemplazar la opción --password=XX por -p. Al hacerlo, MySQL te pedirá que escribas la contraseña a mano cada vez que realices una copia de seguridad: $ mysqldump --user=root -p acme > copia_seguridad.sql Enter password: *********

Recuperando una copia de seguridad Las copias de seguridad sólo son útiles si se pueden recuperar fácilmente los datos cuando se produce un error. Suponiendo que los datos a recuperar se encuentran en el archivo copia_seguridad.sql, el comando que debes ejecutar para recuperar la información de la base de datos es el siguiente: $ mysql --user=TU_USUARIO --password=TU_CONTRASEÑA < copia_segurid ad.sql


Observa cómo en este caso se ejecuta el comando mysql y no el comando mysqldump. Utilizando los mismos datos que en el ejemplo anterior, el comando a ejecutar sería: $ mysql --user=root --password=root < copia_seguridad.sql En este comando no hace falta indicar el nombre de la base de datos que se está recuperando, porque los archivos generados por mysqldump ya contienen esa información. De hecho, al ejecutar este comando de recuperación se borra la base de datos original y toda la información de sus tablas, para después

insertar

toda

la

información

contenida

en

el

archivo copia_seguridad.sql. Si la copia de seguridad la haces en una versión de MySQL moderna y la recuperación de la información se realiza en una versión un poco antigua, es mejor que añadas la opción --skip-opt al realizar la copia de seguridad, para desactivar algunas opciones modernas e incompatibles: $ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA --skip-opt NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Copias de seguridad de más de una base de datos Normalmente el comando mysqldump se utiliza para realizar la copia de seguridad de una única base de datos. No obstante, en ocasiones es necesario copiar varias bases de datos. Para ello, utiliza la opción --databases e indica el nombre de todas las bases de datos separados por un espacio en blanco: $ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA --databases NOMBRE_BASE_DE_DATOS_1 NOMBRE_BASE_DE_DATOS_2 NOMBRE_BASE_DE_DATOS_3 > copia_seguridad.sql Si lo que quieres es realizar una copia de seguridad de todas las bases de datos, utiliza en su lugar la opción --all-databases:


$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA --all-datab ases > copia_seguridad.sql Para finalizar trataremos la temática de la gestión de Usuario en una base de datos que podemos decir son los privilegios que podemos otorgar para algunos usuarios para la edición de la base de datos. Crear usuario y asignar privilegios 1. Ingresar al phpMyAdmin 2. Dar clic en el menú privilegios

3. Dar clic en el link Agregar cuenta de usuario e ingresar la información del usuario

4. En bases de datos para la cuenta de usuario, selecciona la base de datos a la que tiene permisos:


5. En privilegios locales, seleccionar los permisos a los que puede acceder el usuario, en este caso solo permisos para consultar datos.

6. Dejar las demรกs opciones por defecto y dar clic en continuar.

7. Verificar los privilegios:


Generar un backup de la base de datos: 1. Ubicar el archivo mysqldump en la carpeta bin de la instalación de mysql 2. Desde la consola de comandos ejecutar mysqldump -user=TU_USUARIO --password=TU_CONTRASEÑA NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Toca usar un usuario con privilegios para realizar la copia de seguridad.

copia_seguridad.sql

3. Se genera el archivo de copia de seguridad.

Restaurar un backup de la base de datos:

1. Ubicar el archivo mysql en la carpeta bin de la instalación de mysql


2. Desde la consola de comandos ejecutar el comando mysql -user=TU_USUARIO --password=TU_CONTRASEÑA < copia_seguridad.sql

3. Verificar que la base de datos quedó restaurada:

Para terminar podemos complementar que podemos hacer otro tipo de copias de seguridad mencionadas anteriormente como por ejemplo: 

Copias de Seguridad en la nube donde puedes disponer de tus archivos en cualquier parte, en todo momento y desde múltiples dispositivos, donde lo único necesario es contar con una conexión a internet. Entre estos servicios de almacenamiento de se destacan por ejemplo : Dropbox, Google Drive, Microsoft Skydrive, Mega, Box etc.




Otra forma de guardar nuestros archivos seria mediante un disco duro portable ya que puede tener de capacidad hasta 2.000 GB (2 TB)


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.