16
Inventario de una red IP orientado en CMSI 33 Capítulo 3: Diseño e implementación de la base de datos

Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

33

Capítulo 3: Diseño e implementación de la base de datos

Page 2: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

34

Introducción

Toda la información de inventario debe ser guardada en una base de datos centralizada. Tenemos por tanto que implementar el estándar CMSI en una base de datos. Presentaremos en un esquema como quedaría el diagrama UML del estándar CMSI. El esquema no seguirá estrictamente el estándar CMSI si no que estará orientado en dicho estándar. Haremos algunas ampliaciones del estándar, estas ampliaciones se explicarán en apartados posteriores.

Después veremos que tipo de base de datos vamos a utilizar. Para ello

compararemos las ventajas y los inconvenientes de los diversos tipos de datos que existen. Una vez hayamos decidido que base de datos utilizar, elegiremos el servidor de base

de datos a instalar. Por último implementaremos el estándar CMSI en nuestra base de datos definiendo las tablas necesarias.

Implementación de CMSI

En nuestro modelo de sistema de información nosotros vamos a tratar los productos como ordenadores de nuestra red. Identificado por su dirección IP y MAC. Según en que rama del árbol este, nos aportara información y características de ese ordenador. Tendremos por tanto un sistema de inventario representado por un árbol de categoría orientado en CMSI. Según vayamos viendo parte del árbol podemos ver los ordenadores que cumple con la característica de esa rama.

A continuación vamos a ir indicando las ampliaciones del estándar CMSI que hemos aplicado a nuestra base de datos centralizada de inventario.

En nuestra base de datos va a existir tantos árboles de categorías como sondas, de tal forma que de cada sonda va a surgir un árbol de categoría. Esto se hace para definir perfiles de usuarios, los cuales tienen accesos a ver la información de ciertas sondas y no de otras. A pesar de esto no perdemos mucho frente al estándar CMSI por que todos estos árboles comparten los mismos nodos y familias y los mismos tipos de definición. Lo único que se hace es añadirle un atributo especial al árbol indicándole la sonda de la cual proviene la información.

A continuación presentamos el esquema UML del estándar CMSI.

Page 3: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

35

Imagen 14: Esquema UML de la base de datos de inventario

Explicamos a continuación cada uno de los objetos que conforman el diagrama UML de nuestra base de datos de Inventario:

� Category_tree: Tabla que contiene los niveles de jerarquía del árbol. Viene dado por id que indica el nivel de jerarquía y un nombre.

Imagen 15: Tabla category_tree

� Category_node: Tabla que contiene los nodos que conforman el árbol de categorías. Viene dado por un identificador único que es el node_tag. El parents indica el nodo padre, en el caso de que sea el primer nodo apuntará a NULL.

Imagen 16: Tabla category_name

� Probes: Tabla que contiene las sondas que han detectado información de inventario. Viene identificada por la dirección IP de la sonda. Date_update es el último instante de tiempo en el que se detectó un mensaje proveniente de dicha sonda.

Page 4: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

36

Imagen 17: Tabla probes

� Hosts: Tabla que contiene los equipos de la red que se van detectando.

Imagen 18: Tabla hosts

� Type_def: Tabla que contiene el tipo de definición de un atributo CMSI. Estos atributos pueden venir dado por una expresión gramatical, un nodo o una lista de valores.

Imagen 19: Tabla type_def

� Grammar: Tabla que contiene la expresión gramatical de un tipo de definición de atributo.

Imagen 20: Tabla grammar

� Value_list: Tabla que contiene una lista de valores posibles para un tipo de definición concreto.

Imagen 21: Tabla value_list

� Family: Tabla que contiene las familias que existen en la base de datos. Son los últimos nodos del árbol y se caracteriza por que tienen atributos propios. Existe un

Page 5: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

37

elemento, grandparents, que hace referencia al primer nodo del árbol. Esto se hace para saber de forma rápida a que rama pertenece dicha familia.

Imagen 22: Tabla family

� Family_attr: En esta tabla se define los atributos de las familias. Como dijimos anteriormente los atributos de familias se pueden reutilizar.

Imagen 23: Tabla family_attr

� Family_attr_value: En esta tabla se inserta valores a los atributos de familias definidos anteriormente.

Imagen 24: Tabla family_attr_value

� Expresión: Tabla que contiene las reglas sintácticas que clasifican los mensajes en el inventario. De tal forma que si un mensaje cumple esa regla sintáctica automáticamente quedará registrado en aquella familias que tenga definida esa expresión. Cuando nos referimos a regla sintáctica en la práctica suele ser expresiones regulares de Perl.

Imagen 25: Tabla expresión

� Attributes: Tabla que contiene los atributos de la regla sintáctica definida anteriormente.

Page 6: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

38

Imagen 26: Tabla attributes

� Product: Tabla que contiene los productos perteneciente a una familia. También se indica la sonda de la que proviene y el equipo al que hace referencia el producto.

Imagen 27: Tabla product

� Product_attr: Tabla que contiene los atributos cerrados de una familia. A diferencia de family_attr, estos atributos son diferente para cada producto. Cada atributo tiene un tipo de definición concreto y puede ser reutilizado por otros productos.

Imagen 28: Tabla product_attr

� Product_attr_value: Tabla que contiene los valores de los atributos de productos. La columna family_tag y probes no son necesarias, pero se utiliza para comandos de consultas más sencillos.

Imagen 29: Tabla product_attr_value

En cuanto a las ampliaciones que hemos insertado en nuestra base de datos, vamos a comentarla a continuación:

El atributo grandparents es una de las ampliaciones que hemos realizado. Cada familia tiene un enlace al nodo relacional que explicamos anteriormente, esto se hace con el objetivo de que se sepa de qué tipo de productos estamos hablando en rangos muy generales. Por ejemplo si se trata de un producto software o hardware, etc. Nosotros hemos definidos 4 nodos grandparents:

Page 7: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

39

� Redes, te indica los ordenadores y las redes a la que pertenece un determinado equipo.

� Servicios, informa sobre el servicio que esta corriendo en cada equipo. � Redes, te indica los ordenadores y las redes a la que pertenece. � Sistema Operativo, indica el sistema operativo que tiene instalado un cierto equipo. � Propiedades, informa sobre caracteristicas y eventos que se ha producido en ciertos

equipos, por ejemplo reinicios, si es visible por un ping, etc. � Hardware, da información hardware de los equipos.

Redes

Servicios

Sistemas Operativos

Propiedades

Hardware

OS

Sonda

Imagen 30: Nodos grandparents

Otra ampliación más es que existe un nodo y una familia unknown, en este nodo se muestra toda la información de los equipos que no se ha sabido clasificar, de tal forma que si un mensaje no sabe a que parte del árbol pertenece, entonces por defecto se clasifica en este nodo especial del árbol.

Existen expresiones regulares de clasificación, estas expresiones regulares (Tabla

expression) nos permite clasificar los datos en ciertas partes del árbol. Cada mensaje de evento que llegue al sistema de inventario viene con un determinado mensaje. Lo que se hace es pasarle unas expresiones regulares y así saber a que familia del árbol pertenece. El usuario puede definir en cualquier momento expresiones regulares para clasificar los mensajes. La forma más común de proceder es irte a la familia unknown y ver que mensajes no ha sido capaz de clasificar el sistema de inventario. Se define una expresión regular de tal forma que ese mensaje, hasta el momento desconocido por el sistema de inventario, lo clasifique en la rama del árbol que el administrador le haya indicado. Además le puede indicar los atributos que le resulte interesante registrar.

Se define unos atributos de productos por defecto, estos atributos deben ser rellenados siempre:

IP: es la dirección IP del equipo detectado por la sonda.

Name: Nombre de red del equipo.

Sensor: Nombre del sensor que lo ha detectado. Es distinto al nombre de la sonda.

Page 8: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

40

Date: Instante de tiempo que fue detectado dicho mensaje.

Port: Para el caso de que se trate de una familia relacionada con un servicio Web se pone el puerto de dicho servicio. Message: Mensaje de información que ha llegado al sistema de inventario, esto nos sirve para clasificar la información, según el mensaje podemos clasificarla en una parte del árbol u otra. Se le aplica por tanto expresiones regulares a este campo y según si hace “match” en una familia u otra se clasifica. Si no hace “match” en ninguna de las familias se pone en una de por defecto que es la familia Unknown que indica que no ha sido capaz de clasificar este mensaje, esto le puede servir al usuario para definir nuevas familias sobre la estructura.

Además de los atributos indicados anteriormente se puede definir otros atributos para cada ordenador. La única limitación es que todos los ordenadores de dicha familia tiene que tener ese mismo atributo.

Base de datos Las bases de datos son un conjunto de datos que pertenecen al mismo contexto,

almacenados sistemáticamente para su uso posterior. Un sistema gestor de Base de Datos (DBMS) es un tipo de software muy específico,

dedicado a servir de interfaz entre las bases de datos y las aplicaciones que la utilizan. Se compone de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y de un lenguaje de consulta. (Wikipedia 1/2006).

Información

Información

Imagen 31: Esquema de un sistema gestor de base de datos Las ventajas de las Bases de Datos son: • Referidas a los datos:

Page 9: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

41

» Independencia de estos respecto de los tratamientos y viceversa. » Mejor disponibilidad del sistema.

» Mayor eficacia en la recogida, codificación y entrada en el sistema.

• Referidas a los resultados:

o Mayor coherencia. o Mayor valor informativo. o Mejor y más normalizada documentación.

• Referidas a los usuarios:

o Acceso más rápido y sencillo de los usuarios finales. o Más facilidades para compartir los datos por el conjunto de los usuarios. o Mayor flexibilidad para atender a demandas cambiantes.

Los elementos más comunes de un modelo de Bases de Datos son:

• Entidades: cualquier “objeto” discreto sobre el que se tiene información. • Relaciones: dependencia entre dos o más entidades.

• Atributos: propiedades relevantes propias de una entidad o una relación.

• Esquema: conjunto nominado de 2 o más entidades que tienen una vinculación

entre ellos.

Hay varios tipos de modelos de Bases de Datos: • Codasyl o de red. • Jerárquicas.

• Relacionales.

• Orientadas a objetos.

• Documentales.

Cogeremos una Base de Datos relacional, por ser las más utilizadas y por que se

adapta muy bien a la información que queremos registrar. Especialmente el lenguaje de Consulta Estructurado (Structured Quero Language) SQL. Aunque también podíamos haber elegido el tipo de base de datos jerárquicos por que se adapta también a nuestra base de datos. Lo que ocurre es que no está tan difundido como las base de datos SQL.

Page 10: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

42

SQL es mucho más que una herramienta de consulta, aunque este fue su propósito original. Actualmente se usa para controlar todas las funciones que un DBMS proporciona a sus usuarios:

� Definición de datos: permite al usuario definir la estructura y organización de los datos almacenados y la relación entre ellos.

� Obtención de datos: recuperar datos almacenados en la Base de Datos. � Manipulación de datos: actualización de la base de datos añadiendo, borrando y/o

modificando la información almacenada en la base de datos.

� Control de Acceso: usado para restringir los permisos de un usuario para añadir o barrar datos, protegiendo los datos almacenados.

� Compartir datos: se usa para coordinar el acceso a datos concurrentemente,

asegurando que unos usuarios no interfieren con otros.

� Integridad de los datos: define las restricciones de integridad en la base de datos, protegiéndola de corrupción de los datos debido a actualizaciones inconsistentes y fallos de los sistemas.

Por tanto SQL es un lenguaje de:

• Consulta interactivo: los usuarios introducen comandos interactivamente en una herramienta SQL y muestran los resultados por pantalla.

• Programación de bases de datos: los programadores añaden código SQL en sus

aplicaciones para acceder a los datos de la base de datos.

• Administración de base de datos: el administrador responsable lo utiliza para definir la estructura de la base de datos.

• Cliente/Servidor: los ordenadores personales usan SQL para comunicarse usando

una red con los servidores de bases de datos que almacenan los datos.

• Acceso de datos por Internet: los servidores Web de Internet interactúan con los datos corporativos que necesitan usando SQL para los accesos.

• Bases de datos distribuidas: se usa SQL para ayudar a distribuir los datos a través de

muchos sistemas conectados.

• Pasarela de bases de datos: en una red con una mezcla de diferentes productos de DBMS, SQL a menudo se utiliza como intermediario para la comunicación con otros productos.

Las características y beneficios de SQL son:

Los beneficios principales de SQL son:

Page 11: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

43

1. Lenguaje fácil de aprender y comprender. 2. Herramienta intuitiva para la gestión de datos.

Las principales características de SQL que le han hecho triunfar en el mundo de las bases de datos son las siguientes:

1. Independencia del vendedor. 2. Portabilidad a través de diferentes sistemas.

3. Definición como estándar.

4. Apoyo de IBM (DB2) y Microsoft (ODBC y ADO).

5. Basado en el modelo relacional.

6. Lenguaje de alto nivel, con estructura basada en el inglés.

7. Interactivo, permite búsquedas a medida.

8. Acceso a la base de datos a través de lenguajes de programación.

9. Múltiples vistas de los datos.

10. Definición de datos dinámica.

11. Arquitectura Cliente Servidor.

12. Extensible, incluye soporte para tecnología orientada a objetos-> Oracle.

13. Acceso a base de datos a través de Internet.

14. Integración con Java (JDBC).

Una vez que hemos elegido un tipo de base de datos relacional, utilizaremos el

servidor de base de datos SQL. En nuestro caso nos quedaremos con PosgreSQL, en el siguiente apartado se explica las características y el motivo de su elección.

Postgresql

Introducción

PostgreSQL es un servidor de base de datos relacional libre, liberado bajo la licencia BSD. Es una alternativa a otros sistemas de bases de datos de código abierto (como MySQL,Firebird y MaxDB), así como sistemas propietarios como Oracle o DB2.

Características Las principales características son:

Page 12: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

44

• Funciones: Las funciones permiten subir bloques de código que se ejecuten en el servidor. Estas funciones pueden escribirse en una variedad de lenguajes, algunos de los más importantes son PL/pgSQL, C, C++ y Java. Puede definirse si las funciones serán ejecutadas con los permisos del cliente o del usuario que definió la función.

• Alta concurrencia: Mediante un sistema denominado MVCC (Acceso concurrente

multiversión) PostgreSQL permite que mientras un proceso escribe una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una visión de lo último a lo que se le hizo commit. Esta estrategia es superior al uso de bloqueos por tabla o por filas común en otras bases de datos, eliminando la necesidad del uso de bloqueos explícitos.

• Amplía variedad de tipos nativos: PostgreSQL provee nativamente soporte para:

o Número de precisión arbitraria. o Texto de largo ilimitado.

o Figuras geométricas (con una variedad de funciones asociadas).

o Direcciones IP.

o Bloques de direcciones estilo CIDR (encaminamiento Inter-Dominios sin clases) lo que comúnmente conocemos como máscara de red.

o Direcciones MAC.

o Vectores.

o Además los usuarios pueden crear sus propios tipos de datos, los que pueden ser por completo indexables gracias a la infraestructura GIST de PostgreSQL.

• Claves ajenas conocidas como foreign keys.

• Disparadores (triggers).

• Vistas.

• Integridad transaccional.

• Herencia de tablas.

• Tipos de datos y operaciones geométricas.

PostgreSQL es un sistema gestor de base de datos de objetos relacionales basado en POSTGRES, Versión 4.2 desarrollado por la Universidad de Berkeley. POSTGRES fue pionero en muchos conceptos que fueron utilizados después por muchas bases de datos comerciales.

Page 13: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

45

PostgreSQL es un Open-Source descendiente del código original de Berkeley. Esto soporta una gran parte del estándar SQL.

MySQL & PostgreSQL

A continuación vamos a presentar las ventajas y los inconvenientes de ambos gestores de bases de datos que son los más utilizados como bases de datos de código abierto.

MySQL:

• Su principal objetivo de diseño fue la velocidad, se sacrificaron algunas características esenciales.

• Otra característica importante es que consume muy poco recursos, tanto de CPU

como de memoria.

• Licencia GPL a partir de la versión 3.23.19

• Ventajas:

o Mayor rendimiento. Mayor velocidad tanto al conectar con el servidor como al servir SELECTs y demás comandos SQL.

o Mejores utilidades de administración (backup, recuperación de errores, etc.)

o Aunque se cuelgue, no suele perder información ni corromper los datos.

o Mejor integración con PHP, que para nuestro caso no va a ser tan

importante.

o No hay límites en el tamaño de los registros.

o Mejor control de acceso, en el sentido de que usuarios tienen acceso a que tablas y con que permisos.

o MySQL se comporta relativamente mejor que PostgreSQL a la hora de

modificar o añadir campos a una tabla que se está utilizando muchas veces.

• Inconvenientes:

o No soporta transacciones, “roll-backs” ni “subselects”.

o No considera las claves ajenas. Ignora la integridad referencial, dejándola en manos del programador de la aplicación.

PostgreSQL:

• PostgreSQL intenta ser un sistema de bases de datos de mayor nivel que MySQL, ala altura de Oracle, Sybase o Interbase.

Page 14: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

46

• Licencia BSD

• Ventajas:

o Por su arquitectura de diseño, escala muy bien al aumentar el número de CPUs y la cantidad de RAM.

o Soporte transacciones y desde la versión 7.0, las claves ajenas (con

comprobaciones de integridad referencial).

o Tiene mejor soporte para triggers y procedimientos con el servidor.

o Soporta un subconjunto de SQL92 mayor que el que soporta MySQL, es decir, se ajusta mejor al estándar SQL 92.

• Inconvenientes:

o Consume bastante más recursos y carga más el sistema.

o Límite de tamaño de cada fila de las tablas a 8K (se puede ampliar a 32K

recompilando, pero con un coste añadido de rendimiento).

o Es de 2 a 3 veces más lenta que MySQL.

o Menos funciones en PHP.

En general, sistemas en los que la velocidad y el número de accesos concurrentes sea algo primordial, y la seguridad no sea muy importante (puede bastar con hacer backups periódicos que se restauran tras una caída del servidor). En cambio para sistemas más serios en las que la consistencia de la base de datos sea fundamental (BD con información realmente importante, bancos, etc.) PostgreSQL es una mejor opción pese a su mayor lentitud.

Instalación

Para la instalación del servidor PostgreSQL en la versión 8.1.x en un sistema Unix hay que realizar los siguientes pasos:

1. Nos descargamos las fuentes de la web oficial de postgreSQL que se da en la bibliografía:

2. Descomprimimos el fichero.

$ wget http://wwwmaster.postgresql.org/download/mirrors-ftp?file=%2Fsource%2Fv8.1.10%2Fpostgresql-8.1.10.tar.gz .

$ tar xzvf postgresql-8.1.10.tar.gz

Page 15: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Inventario de una red IP orientado en CMSI

47

3. Entramos en el directorio en el que se ha descomprimido las fuentes y lo

configuramos.

4. Compilamos las fuentes.

5. Entramos como superusuario (root) e introducimos la contraseña.

6. Instalamos las fuentes en nuestro equipo.

7. Creamos el usuario postgres.

8. Creamos el directorio donde se va a situar las bases de datos.

9. Le damos permiso al usuario postgres para el directorio anterior.

10. Accedemos a la cuenta del usuario postgres.

11. Inicializamos la base de datos. $ /opt/postgresql/bin/initdb –D /opt/postgresql/data

$ su postgres

$ chown postgres /opt/postgresql/data

$ mkdir /opt/postgresql/data

$ adduser postgres

$ make install

$ su – Password:

$ make

$ ./configure --prefix=/opt --with-ldap

Page 16: Capítulo 3: Diseño e implementación de la base de datosbibing.us.es/proyectos/abreproy/11522/fichero/Capitulo+3%2FCapitul… · Definición de datos: permite al usuario definir

Proyecto Fin de Carrera

48

12. Arrancamos el demonio de base de datos en modo background.

13. Creamos nuestra base de datos, que llamaremos eneo_asset.

14. Ejecutamos el fichero cmsip.sql y data.sql que se da en el anexo del capítulo.

Ya tenemos nuestra base de datos PostgreSQL funcionando y con una base de datos llamada eneo_asset que será la que contenga toda la información de inventario.

Bibliografía Las fuentes consultadas para este capítulo son:

� Wikipedia: Concepto de base de datos

http://www.wikipedia.com

� Web oficial de PostgreSQL.http://www.postgresql.org

$ /opt/postgresql/bin/psql –D eneo_asset –f cmsip.sql $ /opt/postgresql/bin/psql –D eneo_asset –f data.sql

$ /opt/postgresql/bin/createdb eneo_asset

$ /opt/postgresql/bin/postmaster –D /opt/postgresql/data &