seguridad taller de base de datos

51
Unidad 1

Upload: le-daniel-maps

Post on 22-Oct-2015

52 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Seguridad Taller de Base de Datos

Unidad 1

Page 2: Seguridad Taller de Base de Datos

UNIDAD 1 : INSTALACIÓN Y CONFIGURACION DEL SISTEMA GESTOR DE BASES DE DATOSEN DISTINTAS PLATAFORMAS

Raghu Ramakrishnan,Johannes Gehrke. Sistemas de gestión de bases dedatos. 3er. edición. McGraw-Hill. España. 2007.

Page 3: Seguridad Taller de Base de Datos

Raghu Ramakrishnan,Johannes Gehrke. Sistemas de gestión de bases dedatos. 3er. edición. McGraw-Hill. España. 2007.

Page 4: Seguridad Taller de Base de Datos

1.1 REQUERIMIENTOS PARA LA INSTALACION

Raghu Ramakrishnan,Johannes Gehrke. Sistemas de gestión de bases dedatos. 3er. edición. McGraw-Hill. España. 2007.

Page 5: Seguridad Taller de Base de Datos

Raghu Ramakrishnan,Johannes Gehrke. Sistemas de gestión de bases dedatos. 3er. edición. McGraw-Hill. España. 2007.

Page 6: Seguridad Taller de Base de Datos

1.2 Instalación del SGBD

Raghu Ramakrishnan,Johannes Gehrke. Sistemas de gestión de bases dedatos. 3er. edición. McGraw-Hill. España. 2007.

Page 7: Seguridad Taller de Base de Datos

1.3 Configuración del SGBD

Administración de sistemas informáticos en red, Autor Jorge Sánchez

Page 8: Seguridad Taller de Base de Datos

Administración de sistemas informáticos en red, Autor Jorge Sánchez

Page 9: Seguridad Taller de Base de Datos

Unidad 2

Page 10: Seguridad Taller de Base de Datos

2.3 Lenguajes e interfaces de bases de datosEn la Sección 1.4 explicamos la variedad de usuarios que un DBMS soporta. El DBMS debe proporcionar los lenguajes e interfaces apropiados para cada categoría de usuarios. En esta sección explicamos los tipos de lenguajes e interfaces proporcionados por un DBMS y las categorías de usuarios a las que se dirige cada interfaz.2.3.1 Lenguajes DBMSUna vez completado el diseño de una base de datos y elegido un DBMS para implementarla, el primer paso es especificar los esquemas conceptual e interno para la base de datos y cualesquiera mapeados entre los dos.En muchos DBMSs donde no se mantiene una separación estricta de niveles, el DBA y los diseñadores de la base de datos utilizan un lenguaje, denominado lenguaje de definición de datos (DDL, data definition language), para definir los dos esquemas. El DBMS tendrá un compilador DDL cuya función es procesar las sentencias DDL a fin de identificar las descripciones de las estructuras del esquema y almacenar la descripción del mismo en el catálogo del DBMS.En los DBMSs donde hay una clara separación entre los niveles conceptual e interno, se utiliza DDL sólo para especificar el esquema conceptual. Para especificar el esquema interno se utiliza otro lenguaje, el lenguaje de definición de almacenamiento (SDL, storage definition language). Los mapeados entre los dos esquemas se pueden especificar en cualquiera de estos lenguajes. En la mayoría de los DBMSs relacionales actuales, no hay un lenguaje específico que asuma el papel de SDL. En cambio, el esquema interno se especifica mediante una combinación de parámetros y especificaciones relacionadas con el almacenamiento: el personal del DBA normalmente controla la indexación y la asignación de datos al almacenamiento. Para conseguir una arquitectura de tres esquemas real se necesita un tercer lenguaje, el lenguaje de definición de vistas (VDL, víew definítion langllage), a fin de especificar las vistas de usuario y sus mapeados al esquema conceptual, pero en la mayoría de los DBMSs se utiliza el DDL para definir tanto el esquema conceptual como el externo.En los DBMSs relacionales se utiliza SQL actuando como VDL para definir las vistas de usuario o de aplicación como resultado de las consultas predefinidas (consulte los Capítulos 8 y 9).Una vez compilados los esquemas de la base de datos y rellenada ésta con datos, los usuarios deben disponer de algunos medios para manipularla. Entre las manipulaciones típicas podemos citar la recuperación, la inserción, el borrado y la modificación de datos. El DBMS proporciona un conjunto de operaciones o un lenguaje denominado lenguaje de manipulación de datos (DML, data manipulation [anguage) para todas estas tareas.En los DBMSs actuales, los tipos de lenguajes anteriormente citados normalmente no están considerados como lenguajes distintos; más bien, se utiliza un lenguaje integrado comprensivo que incluye construccionespara la definición del esquema conceptual, la definición de vistas y la manipulación de datos. La definición del almacenamiento normalmente se guarda aparte, ya que se utiliza para definir las estructuras de almacenamiento fisico a fin de refinar el rendimiento del sistema de bases de datos, que normalmente lo lleva a cabo el personal del DBA. El lenguaje de bases de datos relacionales SQL es un ejemplo

Page 11: Seguridad Taller de Base de Datos

típico de lenguaje de bases de datos comprensible (consulte los Capítulos 8 y 9). SQL representa una combinación de DDL, VDL y DML, así como sentencias para la especificación de restricciones, la evolución del esquema y otras características.El SDL era un componente de las primeras versiones de SQL, pero se ha eliminado del lenguaje para mantenerlo únicamente en los niveles conceptual y externo.Hay dos tipos principales de DML. Se puede utilizar un DML de alto nivelo no procedimental para especificar de forma concisa las operaciones complejas con las bases de datos. Muchos DBMS admiten sentencias DML de alto nivel mediante la introducción interactiva desde el monitor o terminal, o incrustadas en un lenguaje de programación de propósito general. En el último caso, las sentencias DML deben identificarse dentro del programa para que el precompilador las pueda extraer y el DBMS las pueda procesar. Un DML de bajo nivelo procedimental debe incrustarse en un lenguaje de programación de propósito general. Normalmente, este tipo de DML recupera registros individuales u objetos de la base de datos, y los procesa por separado. Por consiguiente, es preciso utilizar construcciones de un lenguaje de programación, como los bucles, para recuperar y procesar cada registro de un conjunto de registros. Los DMLs de bajo nivel también se conocen con el nombre de DMLs record-at-a-time (registro de una sola vez), debido a esta propiedad. DUl, un DML diseñado para el modelo jerárquico, es un DML de bajo nivel que utiliza comandos como GET UNIQUE, GET NEXT o GET NEXT WITHIN PARENT para navegar de un registro a otro dentro de la jerarquía de registros de una base de datos. Los DMLs de alto nivel, como SQL, pueden especificar y recuperar muchos registros con una sola sentencia DML; por tanto, también se conocen como DML set-at-a-tillle o set-oriented (un conjunto de una sola vez, u orientado a conjuntos). Una consulta en un DML de alto nivel a menudo especifica los datos que hay que recuperar, en lugar de cómo recuperarlos; en consecuencia, dichos lenguajes también se conocen como declarativos.Siempre que hay comandos DML, de alto o de bajo nivel, incrustados en un lenguaje de programación de propósito general, ese lenguaje se denomina lenguaje /tost, y el DML sublenguaje de datos. 9 Por el contrario,un DML de alto nivel utilizado de forma interactiva independiente se conoce como lenguaje de consulta. En general, tanto los comandos de recuperación como los de actualización de un DML de alto nivel se pueden utilizar interactivamente y, por tanto, se consideran como parte del lenguaje de consulta.Los usuarios finales casuales normalmente utilizan un lenguaje de consulta de alto nivel para especificar sus consultas, mientras que los programadores utilizan el DML en su forma incrustada. Los usuarios principiantes y paramétricos normalmente utilizan interfaces amigables para el usuario para interactuar con la base de datos; los usuarios casuales, u otros usuarios, que quieren aprender los detalles de un lenguaje de consulta de alto nivel también pueden utilizar estas interfaces. A continuación explicamos los tipos de interfaces.

Page 12: Seguridad Taller de Base de Datos

1.5. LENGUAJES DE BASES DE DATOS

Un sistema de bases de datos proporciona un lenguaje de definición de datos para especificar el esquema de la base de datos y un lenguaje de manipulación de datos para expresar las consultas a la base de datos y las modificaciones. En la práctica, los lenguajes de definición y manipulación de datos no son dos lenguajes separados; en su lugar simplemente forman partes de un único lenguaje de bases de datos, tal como SQL, ampliamente usado.

1.5.1. Lenguaje de definición de datosUn esquema de base de datos se especifica mediante un conjunto de definiciones expresadas mediante un lenguaje especial llamado lenguaje de definición de datos (LDD).Por ejemplo, la siguiente instrucción en el lenguaje SQL define la tabla cuenta:create table cuenta(número-cuenta char(10),saldo integer)

La ejecución de la instrucción LDD anterior crea la tabla cuenta. Además, actualiza un conjunto especial de tablas denominado diccionario de datos o directorio de datos. Un diccionario de datos contiene metadatos, es decir, datos acerca de los datos. El esquema de una tabla es un ejemplo de metadatos. Un sistema de base de datos consulta el diccionario de datos antes de leer o modificar los datos reales.Especificamos el almacenamiento y los métodos de acceso usados por el sistema de bases de datos por un conjunto de instrucciones en un tipo especial de LDD denominado lenguaje de almacenamiento y definición de datos. Estas instrucciones definen los detalles de implementación de los esquemas de base de datos, que se ocultan usualmente a los usuarios.

Los valores de datos almacenados en la base de datos deben satisfacer ciertas restricciones de consistencia. Por ejemplo, supóngase que el saldo de una cuenta no debe caer por debajo de 100 €. El LDD proporciona facilidades para especificar tales restricciones. Los sistemas de bases de datos comprueban estas restricciones cada vez que se actualiza la base de datos.

Page 13: Seguridad Taller de Base de Datos

Unidad 3

Page 14: Seguridad Taller de Base de Datos

LENGUAJE DE MANIPULACIÓN DE DATOS (DML)

Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado.

El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u otras.

INSERCIÓN, ELIMINACIÓN Y MODIFICACIÓN DE REGISTROS

1- INSERT

Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.

Ejemplo (inserto valores alumno pepe en la materia spd2 a la tabla cursada):

INSERT INTO ''cursada'' (''alumno'', ''materia'') VALUES (''pepe'', ''spd2'')

2- UPDATE

Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.

Ejemplo (modifico la materia donde  el alumno sea pepe):

UPDATE ''cursada'' SET ''materia''= ''spd3'' WHERE ''alumno''= ''pepe''

3- DELETE

Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.

Ejemplo (borro todos los valores de las columnas alumno y materia donde la materia sea spd2):

DELETE FROM ''cursada'' WHERE ''materia''= ''spd2''

Page 15: Seguridad Taller de Base de Datos

CONSULTAS DE REGISTROS

Recuperación de Datos

 Recuperar los datos frente a las fuentes de error mencionadas anteriormente. La restauración de la Base de Datos a su estado normal es responsabilidad del DBA, quien es el responsable de implantar procedimientos de detección de error y recuperación.

El DBA es quien tiene el control centralizado de la base de datos. Se persigue con esto reducir el número de personas que tengan acceso a los detalles técnicos y de diseño para la operación del DBMS.

Las soluciones principales de un DBA son:

DEFINICION DEL ESQUEMA.- Crea el esquema original de la base de datos y genera el diccionario de datos por medio de proposiciones en DDL.

DEFINICION DE ESTRUCTURAS DE ALMACENAMIENTO Y METODOS DE ACCESO.- Se encarga de generar a seleccionar estructuras para el medio secundario y definir los métodos de acceso a la información, esto último por medio de proposiciones en DML.

MODIFICACION DE ESQUEMA Y ORGANIZACIÓN.- Es una actividad poco frecuente que consiste en rediseñar el esquema de la base de datos. Esto se haría necesario ante la modificación abrupta de las condiciones originales que dieron pie al diseño del esquema primario. Las proposiciones para llevar a cabo esta tarea se realizan en DDL.

CONCESION DE AUTORIZACIONES DE ACCESO.- Se encarga de registrar a los usuarios para permitir su acceso al DBMS. Asigna a cada uno de ellos una serie de atributos que le permiten gozar de privilegios como el acceso a determinadas áreas de aplicación, de los datos o del uso de recursos en el sistema.

ESPECIFICACION DE LAS LIMITANTES DE INTEGRIDAD.- Crea una serie de tablas donde se especifica el conjunto de restricciones que serán aplicables durante los procesos de actualización

Para recuperar:

Backup(respaldo): disco duro,cinta.

Backup caliente: Base de Datos esta operativa.

Page 16: Seguridad Taller de Base de Datos

Backup frio: Base de Datos no esta operativa.

Restricción y ordenación de datos

La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos una condición en la cláusula WHERE.

Esta condición regresa todas las filas que cumplen dicha condicional. La complejidad del criterio de búsqueda es prácticamente ilimitada, y en él se pueden combinar operadores de diversos tipos con funciones de columnas, componiendo expresiones más o menos complejas.

Condición de búsqueda basada en una comparación compuesta

En este ejemplo, se utiliza el operador lógico OR en la cláusula WHERE para localizar los empleados que son chofer o secretaria. La consulta y la tabla resultados se muestra a continuación.

SELECT nombreEmpleado "Nombre Empleado", oficioFROM empleadoWHERE (oficio = 'Chofer') OR (oficio = 'Secretaria')

Condición de búsqueda basada en rango

La condición BETWEEN indica los puntos extremos del rango, por lo cual el resultado incluirá tambien a todos los empleados cuyo salario esté entre 2,500 y 5,000 pesos.

SELECT nombreEmpleado "Nombre Empleado", Oficio, TO_CHAR (salario,'999,999') SalarioFROM empleado WHERE salario BETWEEN 2500 AND 5000;

La condición de pertenencia de un conjunto (IN) comprueba si un valor de los datos se corresponde con uno de los valores especificados en una determinada lista, que en este caso está compuesta por sólo dos opciones 'Chofer' y 'Secretaria'. La consulta y la tabla resultado se muestra a continuación.

SELECT nombreEmpleado "Nombre Empleado", oficio, TO_CHAR(salario,'999,999') Salario FROM EmpleadoWHERE oficio IN ('Chofer', 'Secretaria');

Page 17: Seguridad Taller de Base de Datos

La operación más utilizada sobre las cadenas de caracteres es la comparación de patrones, para la que se usa el operador LIKE. Para la descripción de los patrones se utilizan dos caracteres especiales:

Considere la consulta: Determinar que empleados se apellidan o se llaman 'OLIVEROS'

SELECT nombreEmpleado "Nombre Empleado", oficio,TO_CHAR(salario,'999,999') SalarioFROM EmpleadoWHERE nombreEmpleado LIKE '%OLIVEROS%';

Cláusula ORDER BY

En general, las filas de la tabla resultados de una consulta SQL, no están ordenadas por ningún criterio particular. Sin embargo podemos garantizar que los resultados de la consulta queden ordenados utilizando la cláusula ORDER BY en la instrucción SELECT. La cláusula ORDER BY está compuesta por una lista de identificadores de columna según los cuales hay que ordenar los resultados, separados por comas.

ORDER BY se usa para especificar el criterio de ordenación de la respuesta a la consulta. Por defecto la ordenación es ascendente, aunque se puede especificar un orden descendente (DESC). La ordenación se puede establecer sobre el contenido de columnas o sobre expresiones con columnas.

Cláusula DISTINCT

Cuando se realiza una consulta sobre una tabla en la que se extrae información de varias columnas, puede ocurrir que, si no incluimos la/s columna/s que forman la clave principal, obtengamos filas repetidas en la respuesta.

Si este comportamiento es no satisfactorio podemos utilizar la cláusula DISTINCT para eliminar las filas duplicadas obtenidas como respuesta a una consulta.

Informes de datos agregados mediante funciones de grupo

GROUP BY

La cláusula GROUP BY combina los registros con valores idénticos en la lista de campos especificada en un único registro. Para cada registro se puede crear un valor agregado si se incluye una función SQL agregada como por ejemplo SUM o COUNT, en la instrucción SELECT. Su sintaxis es:

SELECT [ALL | DISTINCT ]<nombre_campo> [{,<nombre_campo>}] [{,<funcion_agregación>}]

Page 18: Seguridad Taller de Base de Datos

FROM <nombre_tabla>|<nombre_vista> [{,<nombre_tabla>|<nombre_vista>}][WHERE <condición> [{ AND|OR <condición>}]][GROUP BY <nombre_campo> [{,<nombre_campo >}]][HAVING <condición>[{ AND|OR <condición>}]][ORDER BY <nombre_campo>|<campo_índice> [ASC | DESC][{,<nombre_campo>|<campo_índice> [ASC | DESC ]}]]

En la cláusula GROUP BY se colocan las columnas por las que vamos a agrupar. Y en la cláusula HAVING filtra los registros una vez agrupados.

La evaluación de las diferentes cláusulas en tiempo de ejecución, se efectúa en el siguiente orden:

Cláusula Descripción

WHERE Filtra las filas

GROUP BY Crea una tabla de grupo nueva

HAVING Filtra los grupos

ORDER BY  Clasifica la salida

Los valores NULL en los campos de GROUP BY se agrupan y no se omiten. Sin embargo, los valores NULL no se calculan en ninguna función de agregado SQL.

Un ejemplo de SELECT de grupos es consultar los empleados agrupados por su oficio. Un primer intento de consulta es el siguiente:

SELECT oficio, nombreEmpleadoFROM empleadoGROUP BY oficio

Se presenta un error debido a que cuando se utiliza GROUP BY, las columnas implicadas en el SELECT y que no aparezcan en la cláusulaGROUP BY deben tener una función de agrupamiento. En otras palabras, la columna nombreEmpleado debe tener una función de agrupamiento que actue sobre ella (MAX, MIN, SUM, COUNT, AVG). De no ser posible, deberá aparecer dicha columna a la cláusulaGROUP BY.

La consulta correcta quedaria así;

SELECT oficio, COUNT (nombreEmpleado) Elementos

Page 19: Seguridad Taller de Base de Datos

FROM empleadoGROUP BY oficioORDER BY oficio

Ejemplo: Considere los alumnos inscritos en las materias que imparto durante Enero Junio 2011 en el ITV. La siguiente consulta obtiene el número de alumnos por género y materia.

SELECT Genero, COUNT(*) AlumnosFROM alumnosITVGROUP BY Genero

HAVING 

La cláusula HAVING se utiliza para especificar una condición, se comporta como WHERE, con la diferencia que HAVING se aplica a grupos y no a tuplas (registros). Es decir HAVING filtra los registros agrupados.

Ejemplo: Considere la siguiente información relativa a automoviles, modelos y precios

MODELO AÑO PRECIO

SABLE 2001 50,000

AUDI-A4 2007 420,000

BMW-323 2000 115,000

PORSCHE BOXSTER-987

2002 310,000

MALIBU 1998 32,000

STRATUS-RT 2005 97,500

CHRYSLER 300-C 2005 185,000

FUSION 2006 150,000

CUTLASS EUROSPORT 1992 25,000

Page 20: Seguridad Taller de Base de Datos

MODELO AÑO PRECIO

CIVIC COUPE 2006 135,000

CIVIC LS-4L 2004 89,000

ACCORD EXR-L4 1998 53,000

PLATINA 2005 65,000

PLATINA 2004 60,000

ALTIMA 2003 92,000

ALTIMA 2007 179,000

ALTIMA 2005 105,000

PEUGEOT 206 XR 2006 65,000

TOYOTA COROLLA XRS 2009 190,000

VW SEDAN 1998 25,000

Calcule el promedio por año para todas las marcas a partir del 2003.

CREATE TABLE carros ( modelo CHAR(25), year CHAR(4), precio NUMBER);

SELECT year, TO_CHAR(AVG(precio),'999,999.22') mediaFROM carros GROUP BY yearHAVING year > 2002ORDER BY year;

Page 21: Seguridad Taller de Base de Datos

Visualización de datos de varias tablas

La verdadera potencia del SQL se alcanza cuando combinamos el contenido de más de una tabla. Suponga que desea conseguir una lista con los empleados y los departamentos para los que trabajan. Esta información está repartida en las dos tablas empleado y departamento.

Si necesitamos obtener información de más de una tabla, tendremos la opción de utilizar subconsultas o combinaciones. Si la tabla de resultados final debe contener columnas de tablas diferentes, entonces deberemos utilizar obligatoriamente una combinación. Para realizar una combinación, basta incluir más de un nombre en la cláusula FROM, utilizando una coma como separador y, normalmente, incluyendo una clâusulaWHERE para especificar la columna o columnas con las que hay que realizar la combinación.

Así, podríamos intentar una consulta que seleccionara el campo nombre de la tabla empleado y el nombre del departamento. Y aquí surge el primer problema, ¿cómo distinguimos entre dos columnas que llamándose igual, pertenecen a tablas distintas?

El uso de alias para las tablas incluidas en el FROM o en las columnas del SELECT permite evitar la ambigüedad, el alias se separa por un espacio.

Considere el siguiente modelo físico relacional y su correspondiente código SQL en MySQL y Oracle

La traducción a SQL es

CREATE TABLE artista ( idArtista NUMBER, nombreArtista CHAR(35) NOT NULL, CONSTRAINT pk_Artista PRIMARY KEY (idArtista), CONSTRAINT ak_nombreArtista UNIQUE ( nombreArtista ));

CREATE TABLE disco ( asin CHAR(12), idArtista NUMBER NOT NULL, nombreAlbum CHAR(20) NOT NULL, yearLanzamiento NUMBER(4),

Page 22: Seguridad Taller de Base de Datos

marca CHAR(20), CONSTRAINT pk_disco PRIMARY KEY (asin), CONSTRAINT fk_artistaDisco FOREIGN KEY (idArtista) REFERENCES artista (idArtista) );

El resultado es incorrecto, ya que obtenemos es el producto cartesiano de todos los artistas por todos los discos. SQL tomo cada fila de la tabladisco y le ha asociado todos los idArtista de la tabla artista.

Reglas de Combinación:

Pueden combinarse tantas tablas como se desee.

El criterio de combinación puede estar formado por más de una pareja de columnas.

En la cláusula SELECT pueden citarse columnas de ambas tablas, condicionen o no la combinación.

Si hay columnas con el mismo nombre en las distintas tablas, deben identificarse especificando la tabla de procedencia o utilizando un alias de tabla.

Es necesario incluir una clasula WHERE que asocie las tablas mediante las correspondientes llaves

Para lograr el resultado correcto necesitamos asociar un disco con el nombre del artista que lo interpreta. Y esto se puede hacer si añadimos la condición en la cual idArtista el mismo valor en la fila de la tabla disco que en la fila correspondiente de la tabla artista.

SELECT * FROM artista A, disco DWHERE A.idArtista = D.idArtista

Ejemplo: Considere el siguiente Modelo físico relacional. Que descibe las relaciones existentes para el torneo apertura 2009 del futbol Mexicano de 1era división.

Para crear la estructura y los datos, es necesario realizar el siguiente Procedimiento

Subconsultas

Una subconsulta es una instrucción SELECT anidada dentro de una sentencia SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATEo dentro de otra subconsulta.

Una subconsulta, a su vez, puede contener otra subconsulta y así hasta un máximo de 16 niveles. Las particularidades de las subconsultas son:

Page 23: Seguridad Taller de Base de Datos

1. Su resultado no se visualiza, sino que se pasa a la consulta principal para su comprobación.

2. Puede devolver un valor único o una lista de valores y en dependencia de esto se debe usar el operador del tipo correspondiente.

3. No puede usar el operador BETWEEN, ni contener la setencia ORDER BY.

4. Puede contener una sola columna, que es lo más común, o varias columnas.Este último caso se llama subconsulta con columnas múltiples. Cuando dos o más columnas serán comprobadas al mismo tiempo, deben encerrarse entre paréntesis.

Ejemplo: Nombres de los jugadores que han participado más que el promedio, equipo y posición durante un torneo

SELECT equipo, nombreJugador, posicion, minutos FROM femexfut WHERE minutos > ( SELECT AVG(minutos) FROM femexfut WHERE torneo = 'Bicentenario 2010' AND jj > 0) AND torneo = 'Bicentenario 2010'ORDER BY equipo, posicion, nombreJugador

La consulta más interna calcula el promedio de minutos jugados, y la consulta más externa lo utiliza para seleccionar los nombres de los jugadores que participan más del promedio.

El valor de comparación puede ser un valor simple, como en el ejemplo anterior, o un conjunto de valores. Hay que tener en cuenta este detalle ya que el tipo de operador a utilizar varía. En el primer caso se puede utilizar un operador de comparación de carácter aritmético (<, >, etc.). Y en el segundo uno de tipo lógico (IN).

Las subconsultas pueden devolver más de una columna, y se habrán de comparar de manera consecuente:

Las columnas de la clausula WHERE de la consulta principal deben estar agrupadas por paréntesis.

Las columnas encerradas entre paréntesis deben coincidir en número y tipo de datos con los datos que devuelve la subconsulta.

Se puede utilizar una subconsulta para insertar valores en una tabla en el momento de la creación de la misma.

Ejemplo: Crear una tabla con los datos de los jugadores que participan más que el promedio y su desviación:

CREATE TABLE borrame

Page 24: Seguridad Taller de Base de Datos

SELECT minutos, nombreJugador FROM femexfut WHERE minutos > ( SELECT AVG(minutos) + STDDEV(minutos) FROM femexfut WHERE jj > 0 AND torneo = 'Bicentenario 2010')

AND torneo = 'Bicentenario 2010' ORDER BY minutos DESC, nombreJugador

No es necesario especificar tipos ni tamaños de las columnas, ya que vienen determinados por los tipos y tamaños de las columnas recuperadas en la subconsulta.

Ejemplo: Valor más reciente del dólar en la base de datos

SELECT fecha, precio

FROM dolar

WHERE fecha = ( SELECT MAX(fecha) FROM dolar)

Operadores SET

Los operadores SET (Conjunto) combinan los resultados de dos o más consultas en un único resultado. Las consultas que contienen operadores SET

(Conjunto) son llamadas consultas compuestas (compound queries).

Operador Obtiene

UNIONTodas las filas distintas seleccionadas por ambas consultas

UNION ALL Todas las filas seleccionadas por ambas consultas, incluyendo todos los duplicados

INTERSECT Todas las filas distintas seleccionadas por ambas consultas

MINUS Todas las filas distintas seleccionadas por la primera sentencia SELECT que no se encuentren en la segunda sentencia SELECT

Todos los operadores SET tienen la misma precedencia. Si una sentencia SQL contiene múltiples operadores SET, el servidor de Oracle evalúa estos de izquierda a derecha. Se puede hacer uso de los paréntesis para especificar un orden explicito de evaluación como pueden ser las consultas que usan el operador INTERSECT con operadores SET.

Page 25: Seguridad Taller de Base de Datos

BIBLIOGRAFIAhttp://asc-spd2.blogspot.mx/2010/09/lenguaje-de-manipulacion-de-datos-dml.htmlhttp://www.prograweb.com.mx/tallerBD/030206Join.html

Page 26: Seguridad Taller de Base de Datos

Unidad 4

Page 27: Seguridad Taller de Base de Datos

Seguridad

la seguridad en bases de datos y el DBA El administrador de la base de datos (DBA) es el responsable principal de la gestión de un sistema de base de datos. Entre las responsabilidades del DBA se encuentran la concesión y retirada de privilegios a los usuarios que necesitan utilizar el sistema, y la clasificación de usuarios y datos en función de la política de la organización.

El DBA dispone de una cuenta de DBA en el DBMS, llamada también a veces cuenta de sistema o de superusuario, que proporciona enormes posibilidades que no están disponibles para las cuentas y los usuarios normales de la base de datos.

Entre los comandos privilegiados a nivel del DBA se encuentran los comandos para conceder o retirar privilegios a las cuentas o usuarios individuales o a los grupos de usuarios y para ejecutar los siguientes tipos de acciones:

1. Creación de cuentas. Mediante esta acción se crea una nueva cuenta y contraseña para posibilitar el acceso al DBMS a un usuario o grupo de usuarios.

2. Concesión de privilegios. Esta acción permite al DBA conceder determinados permisos a detenidas cuentas.

3. Retirada de privilegios. Esta acción permite al DBA retirar (cancelar) determinados permisos concedidos previamente a determinadas cuentas.

4. Asignación del nivel de seguridad. Esta acción consiste en asignar cuentas de usuario al nivel de clasificación de seguridad adecuado.

El DBA es el responsable de la seguridad general del sistema de bases de datos. La acción 1 de la lista anterior se utiliza para controlar el acceso al DBMS en su totalidad, mientras que las acciones 2 y 3 se utilizan para controlar las autorizaciones discrecionales en la base de datos y la acción 4 se utiliza para controlar la autorización obligatoria.

(Nathe, 2007, p. 684)

Page 28: Seguridad Taller de Base de Datos

4.1Tipos de Usuarios

Un usuario no es más que un conjunto de permisos que se aplican a una conexión de base de datos.

De igual manera, el usuario también tiene otras funciones:

· Ser el propietario de ciertos objetos.· Definición del tablespace por defecto para los objetos de un usuario.· Copias de seguridad.· Cuotas de almacenamiento.

El usuario que posee privilegios está en la posibilidad de de realizar dos operaciones:

· Operación de sistema: necesita el permiso de sistema correspondiente.· Operación sobre objeto: necesita el permiso sobre el objeto en cuestión.

El rol en una base de datos es una agrupación de permisos de sistema y de objeto.

4.2 Creación de Usuarios

Creación y eliminación de usuarios

Antes de aprender cómo es la creación de usuarios es importante tener claro el concepto de tablespace.Una base de datos se divide en unidades lógicas denominadas TABLESPACES.

Un tablespace es el nombre que tiene un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas, secuencias…) que se creen en la base de datos bajo el tablespace indicado (tablas, secuencias…). Ahora sí, la creación de usuarios se hace a través de la sentencia SQL CREATE USER, donde su sintaxis es:

CREATE USER nombre_usuarioIDENTIFIED [ BY clave | EXTERNALLY ]{ DEFAULT TABLESPACE tablespace_por_defecto }{ TEMPORARY TABLESPACE tablespace_temporal }{ DEFAULT ROLE [ roles, ALL [EXCEPT roles], NONE ] };· IDENTIFIED BY: indica que tipo de autentificación se utilizará:_ Interna de Oracle: una clave para cada usuario de base de datos._ Interna del SO: utilizando la seguridad del SO.

Page 29: Seguridad Taller de Base de Datos

· DEFAULT TABLESPACE será el tablespace por defecto en la creación de objetos del usuario que estamos creando. Si se omite se utilizará el tablespace SYSTEM.· TEMPORARY TABLESPACE: indica el tablespace que se utilizará para la creación de objetos temporales en la operaciones internas de Oracle. Si se omite se utilizará el tablespace SYSTEM.

· DEFAULT ROLE: asigna roles de permisos durante la creación del usuario. La eliminación de usuarios se hace a través de la instrucción DROP USER, donde su sintaxis es:

DROP USER usuario {CASCADE};· CASCADE: borra el usuario y todos los objetos que posee.

(Garavito, 2007, pp. 6-7)

Page 30: Seguridad Taller de Base de Datos

4.3 Privilegios a usuarios

Control de acceso discrecional basado en la concesión y revocación de privilegios

El método habitual para reforzar el control de acceso discrecional en un sistema de base de datos se basa en la concesión y revocación de privilegios. Vamos a considerar los privilegios en el contexto de un DBMS relacional. En particular, veremos un sistema de privilegios similar en cierto modo al desarrollado originalmente para el lenguaje SQL (consulte el Capítulo 8). Muchos DBMS relacionales de la actualidad utilizan alguna variación de esta técnica. La idea principal es incluir declaraciones en el lenguaje de consultas que permitan al DBA y a los usuarios seleccionados conceder y revocar privilegios.

Tipos de privilegios discrecionales

En SQL2, el concepto de identificador de autorización se utiliza para referirse, a grandes rasgos, a una cuenta de usuario (o a un grupo de cuentas de usuario). Por simplicidad, utilizaremos las palabras usuario o cuenta de modo indiferente en lugar de identificador de autorización. El DBMS debe proporcionar acceso selectivo a cada relación de la base de datos basándose en cuentas determinadas. También podemos controlar las operaciones; de este modo, la posesión de una cuenta no significa necesariamente que el propietario de la cuenta esté autorizado a toda la funcionalidad que permita el DBMS. Informalmente hablando, existen dos niveles de asignación de privilegios de uso del sistema de base de datos:

El nivel de cuenta. En este nivel, el DBA especifica los privilegios en particular que posee cada cuenta, independientemente de las relaciones existentes en la base de datos.

El nivel de relación (o tabla). En este nivel, el DBA puede controlar el privilegio de acceso a cada relación o vista individual en la base de datos.

Los privilegios a nivel de cuenta se aplican a las funcionalidades de la propia cuenta y pueden incluir el privilegio sobre CREATE SCHEMA o CREATE TABLE para crear un esquema o relación base; el privilegio sobre CREATE VIEW; el privilegio sobre ALTER, para realizar cambios en el esquema como la agregación o eliminación de atributos en las relaciones; el privilegio sobre DROP, para borrar relaciones o vistas; el privilegio sobre MODIFY, para insertar, borrar o actualizar duplas; y el privilegio sobre SELECT, para obtener infamación de la base de datos usando una consulta SELECT. Observe que estos privilegios de cuenta se aplican a las cuentas en general. Si una cuenta determinada no tiene el privilegio sobre CREATE TABLE, no se podrán crear relaciones desde esa cuenta. Los privilegios

Page 31: Seguridad Taller de Base de Datos

a nivel de cuenta no forman parte de SQL2; deberán ser definidos por los creadores del DBMS. En versiones anteriores de SQL, existía un privilegio denominado CREATETAB para proporcionar a una cuenta el privilegio para crear tablas (relaciones).

El segundo nivel de privilegios se aplica al nivel de relación, bien sean relaciones base o relaciones virtuales (vistas). Estos privilegios se definen en SQL2. En lo que veremos a continuación, el término relación puede referirse a una relación base o a una vista, a menos que especifiquemos explícitamente una o la otra. Los privilegios a nivel de relación especifican, a nivel de usuario, las relaciones individuales sobre las que se puede aplicar cada tipo de comando. Algunos privilegios también hacen referencia a columnas individuales (atributos) de las relaciones.

Revocación de privilegiosEn algunos casos, es deseable conceder un privilegio a un usuario de manera temporal. Por ejemplo, el propietario de una relación podría querer conceder privilegio a un usuario sobre SELECT para realizar una tarea determinada y, después, revocar ese privilegio una vez que la tarea haya finalizado. Según lo anterior, se necesita un mecanismo para revocar privilegios. SQL incluye un comando REVOKE con el propósito de retirar privilegios

(Nathe, 2007, pp. 685-686)

Page 32: Seguridad Taller de Base de Datos

4.4 Roles

Control de accesos basado en roles

El Control de acceso basado en roles (RBAC) surgió en muy poco tiempo en los años 90 como tecnología probada para la gestión y el reforzamiento de la seguridad en sistemas empresariales a gran escala. La idea básica es que los permisos están asociados a roles y a los usuarios se les asignan los roles apropiados.

Los roles se pueden crear mediante los comandos CREATE ROLE y DESTROY ROLE. Los comandos GRANT y REVOKE que se vieron en el control de acceso discrecional (DAC) pueden ser usados para conceder y revocar privilegios a los roles. El control de acceso basado en roles parece ser una alternativa viable a los controles de acceso discrecionales y obligatorios tradicionales; garantiza que sólo los usuarios autorizados tienen acceso a determinados datos o recursos. Los usuarios crean sesiones durante las cuales pueden activar un subconjunto de roles a los que pertenecen.

Cada sesión se puede asignar a muchos roles, pero se corresponde con un único usuario o sujeto. Muchos DBMS permiten el concepto de roles que consiste en asignar privilegios a los mismos.

La jerarquía de roles en RBAC es el modo natural de organizar los roles para que reflejen la jerarquía de autoridad y de responsabilidades en la organización. Por convención, los roles de menor responsabilidad de la parte inferior se conectan con roles de responsabilidad cada vez mayor a medida que se sube por la jerarquía.

Los diagramas de jerarquía son órdenes parciales, por tanto son reflexivos, transitivos y anti simétricos.

Otra idea importante en los sistemas RBAC es la posibilidad de que existan restricciones temporales en los roles, como el tiempo y la duración de las activaciones de los roles, y el disparo temporizado de un rol mediano.

(Nathe, 2007, p. 692)

Page 33: Seguridad Taller de Base de Datos

4.5 Visitas

Autorizaciones y vistas

En el Capítulo 3 se introdujo el concepto de las vistas como medio de proporcionar a un usuario un modelo personalizado de la base de datos. Una vista puede ocultar los datos que un usuario no necesita ver. La capacidad de las vistas para ocultar datos sirve para simplificar el uso del sistema y para mejorar la seguridad.

El uso del sistema se simplifica porque se permite al usuario restringir su atención a los datos de interés. Aunque puede que se niegue el acceso directo a una relación, puede que se le permita el acceso a parte de esa relación mediante una vista. Por tanto, se puede utilizar una combinación de seguridad en el nivel relacional y en el nivel de las vistas para limitar el acceso de un usuario precisamente a los datos que necesita.

En el ejemplo bancario considérese un empleado que necesita saber los nombres de todos los clientes que tienen un préstamo en cada sucursal. Este empleado no está autorizado a ver la información concerniente a los préstamos concretos que pueda tener cada cliente. Por tanto, se le debe negar el acceso directo a la relación préstamo.

Pero si va a tener acceso a la información necesaria se le debe conceder acceso a la vista cliente-préstamo, que consiste sólo en los nombres de los clientes y las sucursales en los que tienen un préstamo. Esta vista se puede definir en SQL de la manera siguiente:

create view cliente-préstamo as(select nombre-sucursal, nombre-clientefrom prestatario, préstamowhere prestatario.número-préstamo= préstamo.número-préstamo)Supóngase que el empleado formula la siguiente consulta SQL:select *from préstamo-cliente

Evidentemente, el empleado está autorizado a ver el resultado de esta consulta. Sin embargo, cuando el procesador de consultas traduce la consulta en una consulta sobre las relaciones reales de la base de datos, se obtiene una consulta sobre prestatario y préstamo. Por tanto, se debe comprobar la autorización de la consulta del empleado antes de que comience el procesamiento de la misma.

La creación de vistas no necesita la autorización de recursos. El usuario que crea una vista no recibe necesariamente todos los privilegios sobre la misma. Ese usuario sólo recibe los privilegios que no proporcionan autorizaciones adicionales

Page 34: Seguridad Taller de Base de Datos

respecto de las que ya posee. Por ejemplo, un usuario no puede recibir la autorización de actualización sobre una vista sin tener la autorización de actualización sobre las relaciones utilizadas para definir la vista. Si un usuario crea una vista sobre la que no se puede conceder ninguna autorización, se deniega la solicitud de creación de la vista. En el ejemplo de la vista cliente-préstamo, el creador de la vista debe tener autorización de lectura sobre las relaciones prestatario y préstamo.

(Silberschatz, 2002, pp. 150-151)

Page 35: Seguridad Taller de Base de Datos

Unidad 5

Page 36: Seguridad Taller de Base de Datos

Unidad 5 : Transacciones

5.1 Conceptos Básicos

Varias operaciones sobre la base de datos forman a menudo una única unidad lógica de trabajo. Un ejemplo que se vio en el Apartado 1.2 es la transferencia de fondos, en el que una cuenta (A) se carga y otra cuenta (B) se abona. Claramente es esencial que, o bien tanto el cargo como el abono tengan lugar, o bien no ocurra ninguno. Es decir, la transferencia de fondos debe ocurrir por completo o no ocurrir en absoluto. Este requisito de todo o nada se denomina atomicidad. Además, es esencial que la ejecución de la transferencia de fondos preserve la consistencia de la base de datos. Es decir, el valor de la suma A + B se debe preservar. Este requisito de corrección se llama consistencia. Finalmente, tras la ejecución correcta de la transferencia de fondos, los nuevos valores de las cuentas A y B deben persistir, a pesar de la posibilidad de fallo del sistema. Este requisito de persistencia se llama durabilidad.

Una transacción es una colección de operaciones que se lleva a cabo como una única función lógica en una aplicación de bases de datos. Cada transacción es una unidad de atomicidad y consistencia. Así, se requiere que las transacciones no violen ninguna restricción de consistencia de la base de datos. Es decir, si la base de datos era consistente cuando la transacción comenzó, la base de datos debe ser consistente cuando la transacción termine con éxito. Sin embargo, durante la ejecución de una transacción, puede ser necesario permitir inconsistencias temporalmente, ya que o el cargo de A o el abono de B se debe realizar uno antes que otro. Esta inconsistencia temporal, aunque necesaria, puede conducir a dificultades si ocurre un fallo.

Se llama transacción a una colección de operaciones que forman una única unidad lógica de trabajo. Un sistema de base de datos debe asegurar que la ejecución de las transacciones se realice adecuadamente a pesar de la existencia de fallos: o se ejecuta la transacción completa o no se ejecuta en absoluto. Además debe gestionar la ejecución concurrente de las transacciones evitando introducir inconsistencias. Volviendo al ejemplo de la transferencia de fondos, una transacción que calcule el saldo total del cliente podría ver el saldo de la cuenta corriente antes de que sea cargado por la transacción de la transferencia de

Page 37: Seguridad Taller de Base de Datos

fondos, y el saldo de la cuenta de ahorros después del abono. Como resultado, se obtendría un resultado incorrecto.

Una transacción es una unidad de la ejecución de un programa que accede y posiblemente actualiza varios elementos de datos. Una transacción se inicia por la ejecución de un programa de usuario escrito en un lenguaje de manipulación de datos de alto nivel o en un lenguaje de programación (por ejemplo SQL, COBOL, C, C++ o Java), y está delimitado por instrucciones (o llamadas a función) de la forma inicio transacción y fin transacción.

La transacción consiste en todas las operaciones que se ejecutan entre inicio transacción y el fin transacción.

5.2 PROPIEDADES DE LAS TRANSACCIONES

Para asegurar la integridad de los datos se necesita que el sistema de base de datos mantenga las siguientes propiedades de las transacciones:

Atomicidad. O todas las operaciones de la transacción se realizan adecuadamente en la base de datos o ninguna de ellas.

Consistencia. La ejecución aislada de la transacción (es decir, sin otra transacción que se ejecute concurrentemente) conserva la consistencia de la base de datos.

Aislamiento. Aunque se ejecuten varias transacciones concurrentemente, el sistema garantiza que para cada par de transacciones Ti y Tj, se cumple que para los efectos de Ti, o bien Tj ha terminado su ejecución antes de que comience Ti , o bien que Tj ha comenzado su ejecución después de que Ti termine. De este modo, cada transacción ignora al resto de las transacciones que se ejecuten concurrentemente en el sistema.

Durabilidad. Tras la finalización con éxito de una transacción, los cambios realizados en la base de datos permanecen, incluso si hay fallos en el sistema.

5.3 NIVELES DE AISLAMIENTO

Se puede ajustar el nivel de aislamiento entre las transacciones y determinar para una transacción el grado de aceptación de datos inconsistentes.

A mayor grado de aislamiento, mayor precisión, pero a costa de menor concurrencia.

Page 38: Seguridad Taller de Base de Datos

El nivel de aislamiento para una sesión SQL establece el comportamiento de los bloqueos para las instrucciones SQL.

Niveles de aislamiento:

• Lectura no comprometida. Menor nivel. Asegura que no se lean datos corruptos físicamente.

• Lectura comprometida. Sólo se permiten lecturas de datos comprometidos.

• Lectura repetible. Las lecturas repetidas de la misma fila para la misma transacción dan los mismos resultados.

• Secuenciable. Mayor nivel de aislamiento. Las transacciones se aíslan completamente.

5.4 GRADOS DE CONSISTENCIA

Consistencia es un término más amplio que el de integridad. Podría definirse como la coherencia entre todos los datos de la base de datos. Cuando se pierde la integridad también se pierde la consistencia. Pero la consistencia también puede perderse por razones de funcionamiento.

Una transacción finalizada (confirmada parcialmente) puede no confirmarse definitivamente (consistencia).

Si se confirma definitivamente el sistema asegura la persistencia de los cambios que ha efectuado en la base de datos.

Si se anula los cambios que ha efectuado son deshechos.

La ejecución de una transacción debe conducir a un estado de la base de datos consistente (que cumple todas las restricciones de integridad definidas).

Si se confirma definitivamente el sistema asegura la persistencia de los cambios que ha efectuado en la base de datos.

Si se anula los cambios que ha efectuado son deshechos.

Ejemplo

         Begin tran                   <Comandos SQL>                   <Comandos SQL>         If @@ ERROR <> 0                   Rollback tran

Page 39: Seguridad Taller de Base de Datos

         Else                   Commit tran

5.5 COMMIT Y ROLLBACK

En la norma SQL se especifica el comienzo de una transacción explícitamente. Las transacciones se terminan con una de las instrucciones SQL siguientes:

Commit work compromete la transacción actual y comienza una nueva. Rollback work provoca que la transacción actual aborte.

Page 40: Seguridad Taller de Base de Datos

Unidad 6 y 7