viernes, 24 de mayo de 2013

respaldo

¿ Por qué es importante para el administrador saber hacer respaldos ?
La información de la computadora ( datos, Word, Excel, correos, fotos, etc) se guarda en archivos. Estos archivos pueden 
borrarse accidentalmente o por distintos motivos, como pueden ser virus o fallas mecánicas del disco duro.

La información una ves perdida es muy difícil y hasta imposible de recuperar, a menos que se haya hecho un respaldo de la
misma. Un archivo perdido puede representar el trabajo de varios días o meses, que en un segundo pueden quedar
totalmente eliminados e imposibles de recuperar.
 2. ¿ Es responsabilidad del administrador hacer un respaldo periódico de los sistemas de archviosde la máquina que administra ?
El sistema de archivo debe respaldarse de acuerdo con algún proceso automatizado, de preferencia cuando el sistema no se encuentre en uso, y con la menor intervención posible de los operadores. Además debe tener un plan de respaldo que satisfaga sus necesidades y que haga posible la restauración de copias recientes de archivos, utilizando una combinación de respaldos completos e incrementales

3. ¿Cómo se hace un respaldo y ¿Como se restaura un respaldo ?
Respaldar información regularmente ayuda a protegerla de ser perdida si algo sucede con tu computadora. Puedes acceder a una copia de seguridad de datos desde otra computadora si el disco duro de tu computadora original no puede ser leído, ahorrándote el tiempo de reconstruir tus archivos. Un respaldo de información puede también ser usado para transferir importantes archivos de una computadora a otra cuando trabajas con varias computadoras o para archivar previas versiones de un archivo en particular.
Determina que archivos quieres respaldar. Es recomendable respaldar tu información crítica relacionada con lo que estás haciendo, como puede ser tu lista de clientes e información financiera si tienes un pequeño negocio, o tu actual manuscrito si eres escritor. La cantidad de información que estás respaldando puede determinar que medio necesitas para hacerlo.
Analiza los diferentes tipos de medios de respaldo que hay disponibles. Existe un número de medios de almacenamiento por medio de los cuales puedes respaldar información. El que escojas dependerá de la cantidad y naturaleza de la información a respaldar y lo que harás con ella.
Las memorias flash, también conocidas como memorias USB, se conectan precisamente, al puerto USB de tu computadora. Son útiles para respaldar tus archivos más críticos y transferirlos de computadora a computadora.
Los discos CD-ROM y DVD-ROM grabables pueden ser leídos desde el lector de CD-ROM o DVD-ROM de tu computadora. Deben ser formateados o grabados, utilizando una computadora que tenga la capacidad de grabarlos; las computadoras mas recientes poseen lectores capaces de grabar en ambos tipos de discos. Los discos de CD-ROM grabables vienen en versiones de 650-megabytes y 800-megabytes, mientras que los discos DVD-ROM grabables pueden almacenar hasta 4.71 gigabytes. Los discos grabables vienen con dos designaciones: “-R” para discos que pueden ser grabados una sola vez y “-RW” para discos que pueden ser grabados múltiples veces. Son buenos para respaldar información de archivos.
Los discos duros externos vienen con un cable para conectarse en el puerto USB. Se pueden usar para respaldar grandes cantidades de información con regularidad. Normalmente incluyen un software para hacer respaldos.
Los sistemas de respaldo en línea almacenan la información en un servidor remoto. Este tipo de respaldo es ofrecido por compañías que se especializan en este servicio o por proveedores de acceso a Internet como parte de su paquete de servicios. La cantidad de información que se puede respaldar con estos servicios depende del proveedor y de cuanta cantidad de espacio en el servidor puedes comprar.

Escoge un método de respaldo. La información puede ser respaldada utilizando varios métodos:
Copiando y pegando la información. Esta es la manera mas simple y puede ser utilizada para respaldar información ya sea para ordenadores de flash como para discos duros. Usualmente, este método es utilizado para respaldar información en una memoria flas o en un disco duro externo. Normalmente este método se usa para respaldar un número pequeño de archivos.
El programa para respaldar archivos que viene incluído en tu computadora. Muchos de los sistemas operativos incluyen un programa para hacer respaldos como Respaldo de windows o Time Machine de la Mac.
Un programa comprado para hacer respaldos. Puedes adquirir un programa comprándoselo a una compañía que se especialice en la venta de software. Normalmente estos programas están diseñados para almacenar la información en cualquiera de los medios antes mencionados. Existen algunos programas gratuitos que puedes descargar en Internet.


Planea cada cuando vas a hacer los respaldos. Para ser efectivos, los respaldos se deben llevar a cabo con regularidad. Puedes realizar los respaldos manualmente o puedes realizar una programación para que se haga un respaldo cada semana o cada día automáticamente.
Realiza el respaldo.

Primero, si tienes PhpMyAdmin instalado en el ordenador donde deseas restaurar la base de datos, tal vez te venga bien para recuperar la información. Simplemente utiliza la herramienta de ejecutar sentencias SQL. Incluso esta herramienta de PhpMyAdmin tiene un lugar donde subir un archivo con sentencias SQL para ejecutarlas en el servidor. Lo malo es que el archivo con el backup no puede ocupar más de 2 megas.

Otra manera de restaurar una copia de seguridad sería por medio de el propio sistema de línea de comandos de MySQL. Con este sistema te puedes conectar a una base de datos en tu ordenador o a cualquier servidor MySQL que tengas permisos de acceso. La sentencia para restaurar una base de datos en el ordenador local sería:


mysql --password=tuclave --user=tuusuario mibase < ficherosentencias.sql 

Si quisiéramos recuperar el backup en otro servidor, también lo podríamos hacer con la línea de comandos de MySQL, pero mediante una sentencia que incluya el host al que nos queremos conectar:


mysql --password=tuclave --user=tuusuario -h 192.168.1.134 basedatos < respaldo.sql

Tener en cuenta que el host al que deseamos conectar, en este caso el servidor con la IP 192.168.1.134, tiene que tener permitido el acceso con ese usuario y clave y para el ordenador desde donde estamos conectando. Así mismo, también este login tiene que disponer de privilegios para ejecutar las sentencias SQL del respaldo sobre la base de datos basedatos.



5.  ¿Cómo se muestra en pantalla el contenido de un respaldo ?
Para ver el contenido de un respaldo se usa la opción (t), veamos el contenido de los respaldos que ya efectuamos.
# cd /root
# tar tvzf backup.tgz | more
# tar tvf /dev/fd0 | more


6.¿ Se puede  copiar una estructura de directorios, preservando los
permisos, dueños, grupos, fechas y ligas ? Ilustra tu respuesta.

# mkdir /users/newhome Crear el directorio destino.
# cd /home Colocarse en el directorio a copiar.
# find . -depth -print | cpio -pdmv /users/newhome Copiar los archivos.
# rm -rf /home Opcional. Borrar el directorio origen,
sólo si se desea mover el directorio.

10. Realiza una tabla donde se  muestre los procedimientos  para  respaldar la base de datos para el proyecto de veterinaria y como restaurar  la base de datos.
Paso
Procedimiento
1
Tener un usuario con privilegios
2
Planear  un respaldo de nivel 0
3
Ejecutamos el comando mysqldump -u "usuario" -p"contraseña" nombre-de-la-base-de-datos > nombre-del-respaldo.sql
4
Planear los siguientes respaldos de nivel 1 y 2
5
Podemos llevar a cabo un respaldo remoto usando el comando: mysqldump -u "usuario" -p"contraseña" -h"nombre-o-dirección-del-host" nombre-de-la-base-de-datos > nombre-del-respaldo.sql 


miércoles, 15 de mayo de 2013

actividad espejeo

Ejecución de un espejo MySQL pública requiere actualmente de unos 250 GB de almacenamiento. El ancho de banda que se utilizará depende del número de espejos en su área, y el número de usuarios en su área que opten por utilizar el espejo.
Tenemos unos espejos primarios que se utilizan para proporcionar datos para las otras réplicas, utilizando el rsync programa. El sitio reflejado consiste sólo en HTML estáticas, imágenes y otros archivos, así que no hay otros requisitos especiales del servidor.
Para mantener el espejo hasta la fecha, tendrá que configurar una tarea cron como la siguiente:
* 36/6 *** rsync-a - delete - delete-después de \
    rsync :/ / example.com / mysql / / ruta / al / local / mirror /
Usted debe sincronizar el espejo, al menos, todos los días, y no más de una vez cada hora. Si personaliza el minuto en el que las actualizaciones de espejo, que le ayudarán a repartir la carga en nuestros servidores espejo primario.

Como montar replicación en master-slave con MySQL

Mediante la replicación master-slave de MySQL podemos repartir las lecturas de la base de datos entre varios hosts. Vamos a ver como montar un slave de MySQL.
Primero de todo debemos tener habilitado los binary logs y definir un server-id únicodentro del entorno de replicación. Para hacer esto deberemos editar el my.cnfañadiendo:
server-id=1
log-bin = mysql-bin
sync_binlog                     = 1
max-binlog-size                 = 500M
expire_logs_days                = 4
innodb_flush_log_at_trx_commit  = 1
En el slave debemos añadir también un server-id único:
server-id=2
relay-log               = mysqld-relay-bin
max-relay-log-size      = 500M
relay_log_purge         = 1
Deberemos reiniciar los MySQL para aplicar los cambios. A continuación deberemos crear un usuario para la replicación en el master:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'secretoreplicacion';
Query OK, 0 rows affected (0.04 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
A continuación deberemos realizar la copia inicial de la base de datos. Se puede hacer de muchas formas, por ejemplo mediante snapshots:
mysql> FLUSH TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |     1284 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Creamos un snapshot y copiamos los datos del datadir del master al datadir del slave:
$ lvcreate -L16G -s -n mysql.snap /dev/local/mysql
Una vez tenemos los datos podemos liberar el LOCK, o si lo hacemos con un snapshot inmediatamente después de crearlo:
mysql> UNLOCK TABLES;
En el slave deberemos indicar los datos del master para empezar la replicación:
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Los datos que hemos sacado del SHOW MASTER STATUS deberemos pasárselos alslave:
CHANGE MASTER TO MASTER_HOST='192.168.4.1', MASTER_USER='slave', MASTER_PASSWORD='secretoreplicacion', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=1284, MASTER_PORT=3306;
A continuación iniciamos la replicación mediante el siguiente comando:
START SLAVE;
Mediante SHOW SLAVE STATUS podemos ver el estado del slave:
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.1
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 951
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 951
              Relay_Log_Space: 407
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 382
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)
Veremos como poco a poco se va reduciendo el “Seconds_Behind_Master” hasta estar sincronizados con las escrituras que se hayan hecho mientras copiabamos los datafiles.
        Seconds_Behind_Master: 0
A continuación, podemos hacer una prueba con los siguientes comandos en elmaster:
mysql> create database lolme;
Query OK, 1 row affected (0.00 sec)

mysql> use lolme;
Database changed
mysql> create table aaa(id int);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into aaa values(2);
Query OK, 1 row affected (0.00 sec)
A continuación en el slave podremos comprobar como se han replicado:
mysql> use lolme;
Database changed
mysql> select * from aaa;
+------+
| id   |
+------+
|    2 |
+------+
1 row in set (0.00 sec)


videos: 







Integrantes: 
Alexa Maria Carlos Barraza
Ricardo Alonso Alvarez Enriquez

miércoles, 8 de mayo de 2013

replicacion

Replicación de bases de datos Es el proceso de copiar y mantener objetos de las base de datos, como por ejemplo relaciones, en múltiples bases de datos que forman un sistema de bases de datos distribuido.

  • Beneficios de la replicación :
  • Disponibilidad.-El modo en que la replicación incrementa la disponibilidad de los datos para los usuarios y aplicaciones. Fiabilidad.- Al haber múltiples copias de los datos disponibles en el sistema, se dispone de un mecanismo excelente de recuperación cuando existan fallos en nodos. Rendimiento.- Se mejora para las transacciones de consulta cuando se introduce la replicación en un sistema que estuviera aquejado de sobrecarga de recursos centralizados. Reducción de la carga.- Modo en q se utiliza la replicación para distribuir datos en ubicaciones remotas
  • Procesamiento Desconectado.- Modo en que la replicación puede implementarse mediante mecanismo instantáneas. Soporta muchos usuarios.- Se puede crear múltiples instantáneas personalizadas que satisfagan los requisitos de cada usuario o grupo de usuarios del sistema. Soporta Aplicaciones Avanzadas.- Para OLPT(Online transaction Processing), OLAP(Online Analitical Processing)
  • Aplicaciones de replicación Soporte para un equipo de ventas remoto.- Requiere la sincronización periódica de un gran número de pequeños nodos móviles remotos con el sistema de base de datos corporativo. Aplicaciones Financieras.- requieren que los datos de múltiples servidores se sincronicen de manera continua e instantánea.
  • http://www.youtube.com/watch?v=o3XP6HROljE

espejeo

Base de Datos Espejo (Database Mirroring) es una configuración donde dos o tres servidores de dase de datos, ejecutándose en equipos independientes, cooperan para mantener copias de la base de datos y archivo de registro de transacciones (log).




Beneficios:

Se guarda información adicional que normalmente no se necesita pero que puede utilizarse en caso de fallo de un disco para reconstruir la información perdida.

Se puede mejorar la velocidad de transferencia distribuyendo los datos entre varios discos.



1. Asegúrese de que las versiones de MySQL instalado en el maestro y en el esclavo son compatibles , debe usar la versión más reciente de MySQL en maestro y servidor.
Por favor no reporte bugs hasta que ha verificado que el problema está presente en la última versión de MySQL.
2. Prepare una cuenta en el maestro que pueda usar el esclavo para conectar. Este cuenta debe tener el privilegioREPLICATION SLAVE . Si la cuenta se usa sólo para replicación (lo que se recomienda), no necesita dar ningún privilegio adicional. (Para información sobre preparar cuentas de usuarios y privilegios.
Suponga que su dominio es mydomain.com y que quiere crear una cuenta con un nombre de usuario de replque puedan usar los esclavos para acceder al maestro desde cualquier equipo en su dominio usando una contraseña de slavepass. Para crear la cuenta, use el comando GRANT:
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
Si quiere usar los comandos LOAD TABLE FROM MASTER o LOAD DATA FROM MASTER desde el servidor esclavo, necesita dar a esta cuenta privilegios adicionales:
§ De a la cuenta el privilegio global SUPER y RELOAD .
§ De el privilegio SELECT para todas las tablas que quiere cargar. Cualquier tabla maestra desde la que la cuenta no puede hacer un SELECT se ignoran por LOAD DATA FROM MASTER.
Si usa sólo tablas MyISAM , vuelque todas las tablas y bloquee los comandos de escritura ejecutando un comandoFLUSH TABLES WITH READ LOCK :
mysql> FLUSH TABLES WITH READ LOCK;
Deje el cliente en ejecución desde el que lanza el comando FLUSH TABLES para que pueda leer los efectos del bloqueo. (Si sale del cliente, el bloqueo se libera.) Luego tome una muestra de los datos de su servidor maestro.
La forma más fácil de crear una muestra es usar un programa de archivo para crear una copia de seguidad binaria de las bases de datos en su directorio de datos del maestro. Por ejemplo. use tar en Unix, oPowerArchiver, WinRAR, WinZip, o cualquier software similar en Windos. Para usar tar para crear un archivo que incluya todas las bases de datos, cambie la localización en el directorio de datos del maestro, luego ejecute el comando:
shell> tar -cvf /tmp/mysql-snapshot.tar .
Si quiere que el archivo sólo incluya una base de datos llamada this_db, use este comando:
shell> tar -cvf /tmp/mysql-snapshot.tar ./this_db
Luego copie el archivo en el directorio /tmp del servidor esclavo. En esa máquina, cambie la localización al directorio de datos del esclavo, y desempaquete el fichero usando este comando:
shell> tar -xvf /tmp/mysql-snapshot.tar
Puede no querer replicar la base de datos mysql si el servidor esclavo tiene un conjunto distinto de cuentas de usuario a la existente en el maestro. En tal caso, debe excluírla del archivo. Tampoco necesita incluir ningún fichero de log en el archivo, o los ficheros master.info o relay-log.info files.
Mientras el bloqueo de FLUSH TABLES WITH READ LOCK está en efecto, lee el valor del nombre y el desplazamiento del log binario actual en el maestro:
mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
La columna File muestra el nombre del log, mientras que Position muestra el desplazamiento. En este ejemplo, el valor del log binario es mysql-bin.003 y el desplazamiento es 73. Guarde los valores. Los necesitará más tarde cuando inicialice el servidor. Estos representan las coordenadas de la replicación en que el esclavo debe comenzar a procesar nuevas actualizaciones del maestro.
Una vez que tiene los datos y ha guardado el nombre y desplazamiento del log, puede reanudar la actividad de escritura en el maestro:
mysql> UNLOCK TABLES;
Si está usando tablas InnoDB , debería usar la herramienta InnoDB Hot Backup. Realiza una copia consistente sin bloquear el servidor maestro, y guarda el nombre y desplazamiento del log que se corresponden a la copia para usarlo posteriormente en el esclavo. InnoDB Hot Backup es una herramienta no libre (comercial) que no está incluída en la distribución de MySQL estándar. Consulte la página web de InnoDB Hot Backup enhttp://www.innodb.com/manual.php para información detallada.
Sin la herramienta Hot Backup , la forma más rápida de hacer una copia binaria de los datos de las tablasInnoDB es parar el maestro y copiar los ficheros de datos InnoDB, ficheros de log, y ficheros de definición de tablas (ficheros .frm). Para guardar los nombres de ficheros actual y desplazamientos, debe ejecutar el siguiente comando antes de parar el servidor:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
Luego guarde el nombre del log y el desplazamiento desde la salida de SHOW MASTER STATUS como se mostró antes. Tras guardar el nombre del log y el desplazamiento, pare el servidor sin bloquear las tablas para asegurarse que el servidor para con el conjunto de datos correspondiente al fichero de log correspondiente y desplazamiento:
shell> mysqladmin -u root shutdown
Una alternativa que funciona para tablas MyISAM y InnoDB es realizar un volcado SQL del maestro en lugar de una copia binaria como se describe en la discusión precedente. Para ello, puede usar mysqldump --master-data en su maestro y cargar posteriormente el fichero de volcado SQL en el esclavo. Sin embargo, esto es más lento que hacer una copia binaria.
Si el maestro se ha ejecutado previamente sin habilitar --log-bin , el nombre del log y las posiciones mostradas por SHOW MASTER STATUS o mysqldump --master-data están vacíos. En ese caso, los valores que necesita usar posteriormente cuando especifica el fichero de log del esclavo y la posición son una cadena vacía ('') y 4.
Asegúrese que la sección [mysqld] del fichero my.cnf en el maestro incluye una opción log-bin . Esta sección debe también tener la opción server-id=master_id , donde master_id debe ser un entero positivo de 1 a 2^32 - 1. Por ejemplo:
[mysqld]
log-bin=mysql-bin
server-id=1
Si estas opciones no están presentes, añádalas y reinicie el servidor.
Pare el servidor que se vaya a usar como esclavo y añada lo siguiente a su fichero my.cnf :
[mysqld]
server-id=slave_id
El valor slave_id , como el valor master_id , debe ser un entero positivo de 1 a 2^32 - 1. Además, es muy importante que el ID del esclavo sea diferente del ID del maestro. Por ejemplo:
[mysqld]
server-id=2
Si está preparando varios esclavos, cada uno debe tener un valor de server-id único que difiera del maestro y de cada uno de los otros esclavos. Piense en los valores de server-id como algo similar a las direcciones IP: estos IDs identifican unívocamente cada instancia de servidor en la comunidad de replicación.
Si no especifica un server-id, se usa 1 si no ha definido un master-host, de otro modo se usa 2. Tenga en cuenta que en caso de omisión de server-id, un maestro rechaza conexiones de todos los esclavos, y un esclavo rechaza conectar a un maestro. Por lo tanto, omitir el server-id es bueno sólo para copias de seguridad con un log binario.
Si ha hecho una copia de seguridad binara de los datos del maestro, cópielo en el directorio de datos del esclavo antes de arrancar el esclavo. Asegúrese que los privilegios en los ficheros y directorios son correctos. El usuario que ejecuta el servidor MySQL debe ser capaz de leer y escribir los ficheros, como en el maestro.
Si hizo una copia de seguridad usando mysqldump, arranque primero el esclavo (consulte el siguiente paso).
Arranque el esclavo. Si ha estado replicando préviamente, arranque el esclavo con la opción --skip-slave-start para que no intente conectar inmediatamente al maestro. También puede arrancar el esclavo con la opción --log-warnings (activada por defecto en MySQL 5.0), para obtener más mensajes en el log de errores acerca de problemas (por ejemplo, problemas de red o conexiones). En MySQL 5.0, las conexiones abortadas no se loguean en el log de errores a no ser que el valor sea mayor que 1.
Si hace una copia de seguridad de los datos del maestro usando mysqldump, cargue el fichero de volcado en el esclavo:
shell> mysql -u root -p < dump_file.sql
Ejecute los siguientes comandos en el esclavo, reemplazando los valores de opciones con los valores relevantes para su sistema:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
La siguiente tabla muestra la longitud máxima para las opciones de cadenas de caracteres:

MASTER_HOST
60

MASTER_USER
16

MASTER_PASSWORD
32

MASTER_LOG_FILE
255

Arranque el flujo esclavo:
mysql> START SLAVE;
Una vez realizado este procedimiento, el esclavo debe conectar con el maestro y atapar cualquier actualización que haya ocurrido desde que se obtuvieron los datos.
Si ha olvidado asignar un valor para server-id en el maestro, los esclavos no son capaces de conectar.


¿Qué es la Seguridad de Datos?
Para el usuario que tiene datos en un sistema de información, las expectativas incluyen: ´
• Que pueda tener acceso a los datos cuando los necesita (el sistema es contable).
• Que los datos no desaparezcan espontáneamente en el futuro. ´
• Que los datos no se alteran sin autorización. ´
• Que los datos no se lean sin autorización
Estas expectativas pueden verse frustradas por varios factores accidentales o intencionales. Los accidentales incluyen:
• El software tiene bugs
• El hardware no es confiable y puede fallar
• Puede haber un desastre natural que destruye el sistema o sus datos
• Un administrador incompetente accidentalmente limpia la base de datos (y no tiene respaldo)


Los factores intencionales incluyen:



Los ataques informáticos:
• Un intruso malicioso logra entrar en el sistema y lee o modifica mis datos
• Alguien falsifica mi identidad y manda mensajes en mi nombre
• Alguien bombardea el sistema con tanto trafico que el mismo colapsa (un denial of service)
• Alguien interviene en los medios físicos de la red para captar información o engañar el sistema
No obstante, es importante recordar que en la práctica el adversario puede no limitarse a los métodos tecnológicamente sofisticados:
Los defensores tienen que cerrar todas las puertas.
Los invasores solo tienen que encontrar a una abierta.
Es por ello que debemos estar alertos también contra los ataques informales:
• Amenazas o sobornos
• Traidores (por ejemplo, los empleados resentidos)
• Los incompetentes (el papelito con el password)
• El no-interesado (la mayora de los usuarios)

 
 
1. La seguridad de las bases de datos
La gran mayoría de los datos sensibles del mundo están almacenados en sistemas gestores de bases de datos comerciales tales como Oracle, Microsoft SQL Server entre otros, y atacar una bases de datos es uno de los objetivos favoritos para los criminales.
Esto puede explicar por qué los ataques externos, tales como inyección de SQL, subieron 345% en 2009, “Esta tendencia es prueba adicional de que los agresores tienen éxito en hospedar páginas Web maliciosas, y de que las vulnerabilidades y explotación en relación a los navegadores Web están conformando un beneficio importante para ellos”[*]
Para empeorar las cosas, según un estudio publicado en febrero de 2009 The Independent Oracle Users Group (IOUG), casi la mitad de todos los usuarios de Oracle tienen al menos dos parches sin aplicar en sus manejadores de bases de datos [1].
Mientras que la atención generalmente se ha centrado en asegurar los perímetros de las redes por medio de, firewalls, IDS / IPS y antivirus, cada vez más las organizaciones se están enfocando en la seguridad de las bases de datos con datos críticos, protegiéndolos de intrusiones y cambios no autorizados.
En las siguientes secciones daremos las siete recomendaciones para proteger una base de datos en instalaciones tradicionales.
2. Principios básicos de seguridad de bases de datos
En esta sección daremos siete recomendaciones sobre seguridad en bases de datos, instaladas en servidores propios de la organización.
2.1 Identifique su sensibilidad
No se puede asegurar lo que no se conoce.
Confeccione un buen catálogo de tablas o datos sensibles [2] de sus instancias de base de datos. Además, automatice el proceso de identificación, ya que estos datos y su correspondiente ubicación pueden estar en constante cambio debido a nuevas aplicaciones o cambios producto de fusiones y adquisiciones.
Desarrolle o adquiera herramientas de identificación, asegurando éstas contra el malware [3], colocado en su base de datos el resultado de los ataques de inyección SQL [4]; pues aparte de exponer información confidencial debido a vulnerabilidades, como la inyección SQL, también facilita a los atacantes incorporar otros ataques en el interior de la base de datos.
2.2 Evaluación de la vulnerabilidad y la configuración
Evalúe su configuración de bases de datos, para asegurarse que no tiene huecos de seguridad.
Esto incluye la verificación de la forma en que se instaló la base de datos y su sistema operativo (por ejemplo, la comprobación privilegios de grupos de archivo -lectura, escritura y ejecución- de base de datos y bitácoras de transacciones).
Asimismo con archivos con parámetros de configuración y programas ejecutables.
Además, es necesario verificar que no se está ejecutando la base de datos con versiones que incluyen vulnerabilidades conocidas; así como impedir consultas SQL desde las aplicaciones o capa de usuarios. Para ello se pueden considerar (como administrador):
  • Limitar el acceso a los procedimientos a ciertos usuarios.
  • Delimitar el acceso a los datos para ciertos usuarios, procedimientos y/o datos.
  • Declinar la coincidencia de horarios entre usuarios que coincidan.
2.3 Endurecimiento
Como resultado de una evaluación de la vulnerabilidad a menudo se dan una serie de recomendaciones específicas. Este es el primer paso en el endurecimiento de la base de datos. Otros elementos de endurecimiento implican la eliminación de todas las funciones y opciones que se no utilicen. Aplique una política estricta sobre que se puede y que no se puede hacer, pero asegúrese de desactivar lo que no necesita.
2.4 Audite
Una vez que haya creado una configuración y controles de endurecimiento, realice auto evaluaciones y seguimiento a las recomendaciones de auditoría para asegurar que no se desvíe de su objetivo (la seguridad).
Automatice el control de la configuración de tal forma que se registre cualquier cambio en la misma. Implemente alertas sobre cambios en la configuración. Cada vez que un cambio se realice, este podría afectar a la seguridad de la base de datos.
2.5 Monitoreo
Monitoreo en tiempo real de la actividad de base de datos es clave para limitar su exposición, aplique o adquiera agentes inteligentes [5] de monitoreo, detección de intrusiones y uso indebido.
Por ejemplo, alertas sobre patrones inusuales de acceso, que podrían indicar la presencia de un ataque de inyección SQL, cambios no autorizados a los datos, cambios en privilegios de las cuentas, y los cambios de configuración que se ejecutan a mediante de comandos de SQL.
Recuerde que el monitoreo usuarios privilegiados, es requisito para la gobernabilidad de datos y cumplimiento de regulaciones como SOX y regulaciones de privacidad. También, ayuda a detectar intrusiones, ya que muchos de los ataques más comunes se hacen con privilegios de usuario de alto nivel.
El monitoreo dinámico es también un elemento esencial de la evaluación de vulnerabilidad, le permite ir más allá de evaluaciones estáticas o forenses. Un ejemplo clásico lo vemos cuando múltiples usuarios comparten credenciales con privilegios o un número excesivo de inicios de sesión de base de datos.
2.6 Pistas de Auditoría
Aplique pistas de auditoría y genere trazabilidad de las actividades que afectan la integridad de los datos, o la visualización los datos sensibles.
Recuerde que es un requisito de auditoría, y también es importante para las investigaciones forenses.
La mayoría de las organizaciones en la actualidad emplean alguna forma de manual de auditoría de transacciones o aplicaciones nativas de los sistemas gestores de bases de datos. Sin embargo, estas aplicaciones son a menudo desactivadas, debido a:
  • su complejidad
  • altos costos operativos
  • problemas de rendimiento
  • la falta de segregación de funciones y
  • la necesidad mayor capacidad de almacenamiento.
Afortunadamente, se han desarrollado soluciones con un mínimo de impacto en el rendimiento y poco costo operativo, basado en tecnologías de agente inteligentes.
2.7 Autenticación, control de acceso, y Gestión de derechos
No todos los datos y no todos los usuarios son creados iguales. Usted debe autenticar a los usuarios, garantizar la rendición de cuentas por usuario, y administrar los privilegios para de limitar el acceso a los datos.
Implemente y revise periódicamente los informes sobre de derechos de usuarios, como parte de un proceso de formal de auditoría.
Utilice el cifrado [6] para hacer ilegibles los datos confidenciales, complique el trabajo a los atacantes, esto incluye el cifrado de los datos en tránsito, de modo que un atacante no puede escuchar en la capa de red y tener acceso a los datos cuando se envía al cliente de base de datos.




http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r85343.PDF

jueves, 2 de mayo de 2013



Creacion de Indices en Mysql y Oracle



Creación de Índices
.
Un índice es una estructura interna que el sistema puede usar para encontrar uno o más registros en una tabla de forma rápida. En efecto, un índice de base de datos es, conceptualmente, similar a un índice encontrado al final de cualquier libro de texto. De la misma forma que el lector de un libro acudiría a un índice para determinar en qué páginas se encuentra un determinado tema, un sistema de base de datos leerá un índice para determinar las posiciones de registros seleccionados por una consulta SQL. En otras palabras, la presencia de un índice puede ayudar al sistema a procesar algunas consultas de un modo más eficiente.


Un índice de base de datos se crea para una columna o grupo de columnas. La figura siguiente muestra un índice (XCNOMBRE) basado en la columna CNOMBRE de la tabla CURSO. Observemos que el índice, a diferencia de la tabla CURSO, representa valores CNOMBRE en orden. Además, el índice es pequeño en relación con el tamaño de la tabla. Por lo tanto, es, probablemente, más fácil que el sistema busque el índice para localizar un registro con un valor CNOMBRE dado, a que explore toda la tabla en busca de ese valor. Por ejemplo, el índice XCNOMBRE podría ser muy útil al sistema cuando ejecute la siguiente sentencia SELECT.



Tenemos tres tipos de índices.
El primero corresponde a las claves primarias, que como vimos, también se pueden crear en la parte de definición de columnas. La sintaxis para definir claves primarias es:


definición_columnas | PRIMARY KEY (index_nombre_col,...)


mysql> CREATE TABLE ciudad4(nombre CHAR(20) NOT NULL,
poblacion INT NULL DEFAULT 5000,
PRIMARY KEY (nombre));


Pero esta forma tiene más opciones, por ejemplo, entre los paréntesis podemos especificar varios nombres de columnas, para construir claves primarias compuestas por varias columnas:


mysql> CREATE TABLE mitabla1 (id1 CHAR(2) NOT NULL,
id2 CHAR(2) NOT NULL,
texto CHAR(30),
PRIMARY KEY (id1, id2));




El segundo tipo de índice permite definir índices sobre una columna, sobre varias, o sobre partes de columnas. Para definir estos índices se usan indistintamente las opciones KEY o INDEX.


mysql> CREATE TABLE mitabla2(id INT, nombre CHAR(19), INDEX (nombre));
O su equivalente:
mysql> CREATE TABLE mitabla3(id INT, nombre CHAR(19), KEY (nombre));
También podemos crear un índice sobre parte de una columna:
mysql> CREATE TABLE mitabla4(id INT, nombre CHAR(19), INDEX (nombre(4)));



Índices en Oracle.

Creacion de un índice sobre la taba CLIVARIOS utilizando las columnas NOMCLIENTE y DIRECCION:

CREATE INDEX IK_CLID on CLIVARIOS (NOMCLIENTE, DIRECCION));

Eliminacion de un índice: DROP INDEX nombre;