Está en la página 1de 45

TALLER DE BD

Unidad 3. Administración de bases de datos


Temario…
Unidad 3. Administración de base de datos
 Definición del esquema de seguridad

 Definición del esquema de recuperación

 Diseño y procesamiento de transacciones


Vistas (Views)
 Las vistas son tablas virtuales. Al igual que las tablas que contienen datos,
las vistas simplemente contienen consultas que recuperan datos
dinámicamente cuando son usadas.

Tabla 1 Tabla 2 Tabla 3


c1 c2 c3 c4 c5 c6 c7 c8 c1 c5 c10

c1 c5 c4 c8 c10 Tabla Virtual, formada con


determinados campos de cada
tabla.
Vistas (Views)
 Paso 1: Creación de una tabla
create table alumnos1 (mat varchar(3), nombre varchar(10), apat varchar(10), edad
int, email varchar(20), ciudad_origen varchar(20), telefono varchar(10));

 Paso 2: inserción de 3 registros a alumnos1

 Paso 3: Creación de una vista


Create view vista1 as select nombre, apat, edad, email from alumnos1;

Después de haber creado una vista, se puede realizar una instrucción SELECT con
ella, de la siguiente manera:
Select * from vista1 order by edad asc;

La salida contiene sólo las filas que se filtraron en la sentencia CREATE VIEW. Otras
filas de la misma tabla, no se puede acceder mediante esta vista.
Vistas (Views)
ALUMNOS1
mat nombre apat edad email ciudad telefono
123 Juan Pérez 23 jp@ittizimin.edu.mx tizimin 1234566
124 Ana Pérez 22 ap@hotmail.com merida 2223344
125 María Sánchez 21 ma@yahoo.com.mx merida 5544553
Create view vista1 as select nombre, apat, edad, email from alumnos1;
VISTA1 nombre apat edad Email
Juan Pérez 23 jp@ittizimin.edu.mx
Ana Pérez 22 ap@hotmail.com
María Sánchez 21 ma@yahoo.com.mx
Select nombre, apat, edad from VISTA1 order by edad asc
nombre apat edad
María Sánchez 21
Ana Pérez 22
Juan Pérez 23
Vistas (Views)
ALUMNOS EJERCICIO:
matricula nombre apellido edad casado -Crea una vista con nombre, apellido y
123 Juan Rodríguez 23 SI edad de los alumnos, además, nombre de
la(s) asignaturas que cursan así como su
124 Pedro Pérez 19 SI
turno.
125 Ana Moguel 24 NO - De la vista despliega nombre y apellido
126 Pedro Pérez 23 SI de los alumnos que estudian en el turno
127 Luisa Sánchez 24 NO matutino, ordénalos ascendentemente.

CURSAN ASIGNATURAS
id nombre creditos semes Turno
matricula id
A Física 5 1 M
123 A
B Cisco 5 2 V
123 B
C Java 4 3 M
125 C
D Cálculo 5 2 V
126 C
E Química 4 1 M
124 E
Vistas (Views)
 ¿Por qué utilizar vistas?
 Para simplificar operaciones complejas de SQL. Después de la
consulta se escribe, se puede reutilizar con facilidad, sin tener
que conocer los detalles de la consulta subyacente en sí.
 Para acceder a las partes de una tabla en lugar de tablas
completas.
 Para proteger los datos. El usuario puede tener acceso a
subconjuntos específicos de las tablas en lugar de tablas enteras.
Bloqueos (Locks)
PRODUCTOS

ID DESCRIPCION EXISTENCIA

1 Tylex Flu 5

Almacén

Existencia = 5
PRODUCTOS

ID DESCRIPCION EXISTENCIA

1 Tylex Flu 5

Empresa

Se maneja una base de datos por cada punto de venta


dentro de la empresa o es una sola BD????
Bloqueos (Locks)

PRODUCTOS Almacén
ID DESCRIPCION EXISTENCIA
Existencia = 5
1 Tylex Flu 5

Empresa

Cuando son varios puntos de venta lo correcto es manejar una sola base de
datos central a través de una red. ¿Qué puede pasar en este modelo cuando
se accede a la BD al mismo tiempo???????????
Bloqueos (Locks)
Acción
correcta

Calcula que hay


SELECT suficientes Se resta 1 al
Cliente A encuentra 2 productos para inventario
ordena 1
producto productos en ese pedido, así dejando 1 en
existencia que procesa el existencia
pedido

Error El pedido del


cliente B nunca
será surtido

Calcula que hay


SELECT suficientes Se resta 2 al
Cliente B encuentra 2 productos para inventario
ordena 2
productos productos en ese pedido, así dejando 0 en
existencia que procesa el existencia
pedido

TIEMPO
Bloqueos (Locks)
 La solución al problema anterior es utilizar bloqueos. Bloquear permite al
subproceso tener acceso exclusivo a cierto número de tablas, asegurando
que puede hacer los movimientos requeridos sin interferencia de otros
procesos.
Sólo
queda un
producto

Calcula que
SELECT hay suficientes
Cliente A encuentra 2 productos para Desbloquea la
ordena 1 tabla
productos en ese pedido, así
producto
existencia que procesa el
pedido

Tabla disponible para Acción


otras peticiones correcta

Checa el nivel
El cliente B espera a SELECT del inventario, el
Cliente B que termine A cual es
ordena 2
encuentra 2 insuficiente para
producto productos en el pedido, así
existencia que avisa al
cliente
TIEMPO
Bloqueos (Locks)
 Si se utiliza bloqueos, el código podría verse de la
siguiente manera:

LOCK TABLES productos WRITE;


SELECT existencia FROM productos WHERE id_producto=15
UPDATE productos SET existencia=(existencia - cantidad_solicitada) WHERE
id_producto=15
UNLOCK TABLES

 De esta forma el proceso está un poco mejor


administrado, porque el segundo cliente tiene que
esperar hasta que el primero haya terminado.
Bloqueos (Locks)
 Al comando LOCK TABLES se le puede dar una lista de
tablas, algunas para bloquearse para lectura (READ) y
otras para escritura (WRITE).
 Hay unas reglas simples sobre el manejo de bloqueos READ
y WRITE en MySQL:
 Si un proceso hace un bloqueo READ en algunas tablas, este
subproceso y todos los demás, sólo podrán leer las tablas.
 Si un subproceso hace un bloqueo WRITE, se convierte en el único
subproceso con cualquier tipo de acceso a esas tablas. Puede
leer y escribir en ellas, y ningún otro subproceso puede acceder
a las tablas hasta que el proceso que las bloqueo las libere.
Bloqueos (Locks)
 Enviar un comando LOCK TABLES no implica que se obtenga, el
subproceso tiene que esperar en la cola hasta que los bloqueos de
las tablas sean liberados. Hay una cola para WRITE y otra par
READ.
 El siguiente es el orden de las prioridades:
 Cuando se envía un bloqueo WRITE
Si no hay bloqueos en ese momento en la tabla, se
otorga el bloqueo WRITE sin colocarlo en la cola de
espera.
De otra forma, el bloqueo se coloca en una cola de
bloqueos WRITE.
 Cuando se envía un bloqueo READ
Si la tabla no tiene bloqueos WRITE, se otorga el bloqueo READ
sin colocarlo en la cola de espera.
De otra forma, la solicitud se coloca en una cola de
bloqueos READ.
Usuarios y privilegios
 En modo gráfico
Usuarios y privilegios
 En modo gráfico
Usuarios y privilegios
 En modo comando:
 Para crear un usuario:
CREATE USER 'ana'@'localhost'
IDENTIFIED BY '123';
 La anterior instrucción permite que ana sea capaz de
conectarse desde el host local, pero debe especificar la
contraseña ‘123’.
 Si el usuario que se crea no incluye ninguna cláusula
IDENTIFIED BY, se crea la cuenta sin contraseña. Esto es
inseguro y no recomendado.
 Para asignar privilegios a un usuario sobre una BD:
GRANT ALL PRIVILEGES ON MyDB.*
TO ’ana’@’localhost’; PELIGRO
Usuarios y privilegios
 También es posible agregar un usuario desde la tabla user de
MySQL.
INSERT INTO user (Host, User, Password) VALUES (‘%’,’juan’,
PASSWORD(“123”));

grant all on *.* to juan identified by 'password(123)';

 Y posteriormente, agregar privilegios desde la tabla db como


sigue:

INSERT INTO db (Host, User, Db, Select_priv) VALUES


(“localhost”,”Juan”,”Prueba”,”Y”);
Usuarios y privilegios
 Para ver los privilegios concedidos a un usuario:
SHOW GRANTS FOR ’ana’@’localhost’;
 Para conceder sólo determinados privilegios a un
usuario:
GRANT SELECT, INSERT, UPDATE,
DELETE ON *.* TO ’karla’@’%’;

Sobre todas las bases de datos y sus


respectivas tablas
Usuarios y privilegios
 Asignar privilegios a un usuario excepto el de “asignar
privilegios”:
GRANT ALL ON MyBD.* TO ’ana’@’localhost’;

 Asignar privilegios sólo a determinadas tablas:


GRANT ALL ON MyBD.table_name TO
’ana’@’localhost’;

 Asignar privilegios a nivel de columna:


GRANT SELECT (col1,col2), INSERT (col1,col2),
UPDATE (col1,col2)
ON Mydb.table_name TO ’ana’@’localhost’;
Usuarios y privilegios
 Revocación de privilegios:
REVOKE DROP ON *.* FROM
’ops’@’localhost’;

REVOKE DELETE ON
production.user_accounts FROM
’ops’@’localhost’;
Usuarios y privilegios
 Para remover usuarios del sistema junto con todos
sus privilegios se utiliza la sentencia DROP USER.
Ejemplo: DROP USER 'jim'@'localhost';
 El nombre de un usuario puede ser cambiado con la
sentencia RENAME USER.
Ejemplo: RENAME USER 'jim'@'localhost'
TO 'john'@‘192.168.1.5';
Transacciones
 Una transacción es un conjunto de sentencias SQL
que son ejecutadas como si fueran una sola
sentencia. Banco B
4. Se hace la 5. Se hace el
incremento en la
Banco A transferencia
cuenta
2. Consulta si hay la correspondiente.
cantidad disponible.
3. Se realiza un
decremento de
$5000 en la cuenta
correspondiente.
¿Qué sucede si al
1. Se envía solicitud
momento de transferir
al banco de A a B ocurre un
Fallo?
Se desea transferir del
Banco A al Banco B, la
cantidad de $5000.
Transacciones
 Sentencias para realizar la transferencia de una cuenta
A a otra B
 Se consulta si hay la cantidad disponible:
select cantidad from cuentas where numcuenta=‘123’
 Se hace un decremento en la cuenta A:
update cuentas set cantidad = cantidad – 5000 where
numcuenta=‘123’
 Se hace el incremento en la cuenta B:
update cuentas set cantidad = cantidad + 5000 where
numcuenta=‘145’

NUNCA SE REALIZA
Transacciones
 Se debe garantizar que ante un fallo de cualquier tipo,
todas las sentencias de la transacción se realicen o que
ninguna suceda.
 Las sentencias START TRANSACTION y COMMIT son
colocadas al principio y fin de los comandos SQL para
representar el inicio y fin de una transacción.
 En MySQL, las transacciones pueden iniciar con START
TRANSACTION y pueden ser finalizadas con COMMIT
(transacción exitosa) o con ROLLBACK (que indica que
los datos deberían ser reestablecidos a los originales).
Transacciones
 Una BD es segura transaccionalmente si cumple con las propiedades
ACID (Atomocity, Consistency, Isolation, Durability):
 Atomicidad: Se refiere al concepto de que todas las sentencias dentro
de la transacción son ejecutadas o ninguna de ellas.
 Consistencia: Esta propiedad garantiza que la BD se mueva de un
estado consistente a otro.
 In a transactional system (ACID-compliant by definition), if one or more
statements in the transaction do not succeed, the entire transaction must be rolled
back to a consistent state. If a transaction is successful, the database moves from
one consistent state to another.
 Aislamiento: Especifica que los datos que han sido iniciados por una
transacción no pueden ser vistos o modificados por otra transacción
hasta que finalice la primera.
 Durabilidad: Una vez que una transacción ha sido completada
exitosamente, los resultados son registrados de manera permanente.
Transacciones
 En MySQL para trabajar con transacciones se utiliza:
 BEGIN, BEGINWORK, START TRANSACTION: Cualquier sentencia
puede ser utilizada para iniciar una transacción.
 COMMIT: Establece un fin exitoso de la transacción.
 ROLLBACK: Es utilizado para deshacer una transacción ya sea en el
estado en que estaba antes de la ejecución de la transacción o
hasta un cierto punto anterior en donde la ejecución está
actualmente ocurriendo. Este punto se llama punto de rescate
(SAVEPOINT).
 SAVEPOINT: Es un punto definido en la transacción. Es utilizado
para establecer un punto de rescate con un nombre. La sentencia
ROLLBACK TO SAVEPOINT es usada para deshacer la transacción
hasta el punto de rescate señalado con el nombre.
Transacciones
 Paso 1: Creación de la tabla test
CREATE TABLE test (campo INT NOT NULL PRIMARY KEY) ENGINE=
InnoDB;
 Paso 2: Inserción de registros
INSERT INTO test VALUES(1),(2),(3);
 Paso 3: Consulta a la tabla
SELECT * FROM test;
 Paso 4: Inicio de una transacción
BEGIN;
 Paso 5: Inserción de un nuevo registro
INSERT INTO test VALUES(4);
 Paso 6: Consulta a la tabla
SELECT * FROM test;
 Paso 7: Deshacer las operaciones
ROLLBACK;
 Paso 8: Consulta a la tabla
SELECT * FROM test;
Transacciones
 Paso 1: Creación de la tabla trans_test
CREATE TABLE trans_test (id INT PRIMARY KEY
AUTO_INCREMENT, name VARCHAR(8)) ENGINE=InnoDB;
 Paso 2: Insertamos 2 registros
INSERT INTO trans_test (name) VALUES (’a’), (’b’);
 Paso 3: Consultamos la tabla
SELECT * FROM trans_test;
 Paso 4: Iniciamos una transacción
START TRANSACTION;
 Paso 5: Actualizamos el registro con id=1
UPDATE trans_test SET name=’z’ WHERE id = 1;
 Paso 6: Inicio de un SAVEPOINT (Punto de rescate)
SAVEPOINT savepoint_one;
Transacciones
 Paso 7: Actualizamos el registro con id=2
UPDATE trans_test SET name=’y’ WHERE id = 2;
 Paso 8: Consultamos que se hayan realizado los cambios
SELECT id,name FROM trans_test;
 Paso 9: Deshacer hasta el punto llamado savepoint_one
ROLLBACK TO SAVEPOINT savepoint_one;
 Paso 10: Consultamos la tabla
SELECT id,name FROM trans_test;
 Paso 11: Fin de la transacción
COMMIT;
Transacciones
 Manejo de transacciones en Java
try {
Connection con = DriverManager.getConnection(url);
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.execute(SQLCommand);
con.rollback();
con.close();
}

catch(Exception e){
//con.commit();
}
Recuperación (Recovery)
 El backup también llamado copia de respaldo o de
seguridad, es la copia de información sensible (datos y
metadatos) de un sistema informático desde su medio o
medios de almacenamiento a un medio distinto de éste, sea
cual fuere esta información, para su posterior
almacenamiento en un entorno seguro con el supuesto fin
de recuperar información con la mayor confiabilidad
posible, si fuera necesario, en caso de que cualquier motivo
o incidente genere la pérdida o modificación no deseada
de los datos originales, para de esta manera obtener
nuevamente, en un tiempo conveniente y razonable; la
operatividad del sistema del cual se hizo la copia previa al
incidente.
Recuperación (Recovery)
 El proceso se realiza presuponiendo cierta
confiabilidad pero no toda. Los dispositivos destinos
corren el mismo riesgo que los medios de origen
aunque en menor medida.

 La recuperación de la información en un tiempo


conveniente y razonable se refiere a la severidad con
que la información debe estar disponible nuevamente.
El backup no sirve de mucho si los tiempos de
recuperación son excesivos.
Recuperación (Recovery)
 Junto al término backup aparece otro no menos
importante: el restore (recuperación o restauración),
que es la operación inversa al backup. O sea,
copiar al sitio original, desde el soporte destino, la
información a la cual se le realizó backup
anteriormente.
Recuperación (Recovery)
 Usos para los BackUps
 Falla de los medios de almacenamiento
 Fallas eléctricas
 Ataques externos
 Virus
 Robo o Hurto
 Errores humanos
 Accidentes
 Problemas con las aplicaciones
 Desastres naturales
 Creación de un servidor de pruebas
Recuperación (Recovery)
 TIPOS DE RESPALDOS
 Respaldo lógico (Logical BackUp):
 Involucraleer un conjunto de registros de una base de
datos y escribirlos dentro de un archivo.
Recuperación (Recovery)
 TIPOS DE RESPALDOS
 Respaldo Físico (Physical BackUp):
 Es una copia física de todos los archivos que pertenecen a
la base de datos.
 También llamado backup completo (Full).
Ventajas
 Son más rápidos de respaldar y restaurar que los Lógicos..
 No es necesario combinarlo con ningún otro tipo de backup.
Desventajas
 Sucesivos backups completos consumen mucho volumen de
almacenamiento.
 La velocidad en la que se realiza la copia depende de la
cantidad de archivos y su volumen.
Recuperación (Recovery)
 TIPOS DE RESPALDOS
 Respaldo incremental o progresivo (Incremental Backup):
 Un respaldo incremental es una copia de seguridad que contiene
sólo los datos modificados desde el último backup completo o
incremental.
Ventajas
 La ventaja de un respaldo incremental en comparación con otro tipo de
respaldo es que es varias veces más rápido.
 Requiere menos volumen de almacenamiento.
Desventajas
 Es necesario mantener todas las copias realizadas para no perder la
consistencia del ciclo.
 La recuperación requiere de todos los respaldos.
 Pueden solaparse los distintos procesos de backups.
 Utilizar diversas copias incrementales hace que el proceso de
restauración sea tediosa y retardado.
Recuperación (Recovery)
 TIPOS DE RESPALDOS
 Respaldo Consistente (Consistent BackUp):
 Es un respaldo en un momento exacto en el tiempo.
 Respaldo en caliente (Hot backup):
 También llamado respaldo dinámico, es una copia de seguridad
realizada en los datos a pesar de que están siendo accedidos
por los usuarios y por consiguiente, puede estar en un estado de
actualización.
 Los Backups en caliente pueden proporcionar una solución
conveniente en sistemas multiusuario.
 Respaldo en frío (Cold backup):
 Un backup en frío es una copia de seguridad que se lleva a
cabo mientras la base de datos está fuera de servicio.
 La desventaja es que el servidor no está accesible durante el
tiempo en que se realiza la copia de seguridad.
Recuperación (Recovery)
Recuperación (Recovery)
 Desde la ventana de comandos, sin entrar a mysql:
 Exportar la estructura de una base de datos a un archivo, no la información:
mysqldump -u username -p - -no-data databasename > filename.sql
Recuperación (Recovery)
 Desde la ventana de comandos, sin entrar a mysql:
 Exportar los datos de toda la base de datos a un archivo, no la estructura:
mysqldump -u username -p - -no-create-info
databasename > filename.sql
Recuperación (Recovery)
 Para importar una base de datos MySQL
mysql -u username -p databasename < filename.sql
 Previamente debe estar creada la base de datos:
Investigación

Fundamentals of Database
Management Systems
- Mark Gillenson
- Second Edition
- John Wiley & Sons, Inc.

Database control issues: security,


backup and recovery, concurrency
- Chapter 11
- Page 291
Investigación
 Respecto a la cadena de hoteles Hilton:
 Cuál es el nombre del sistema CRM que utiliza la cadena de
hoteles y con qué propósito.
 Qué SGBD utilizan y bajo qué plataforma
 Qué otras tecnologías de bases de datos utiliza la cadena de
hoteles
 Cuáles son los 3 tipos de violaciones/infracciones (breaches)
más comunes a la seguridad de los datos y descríbelos.
 Qué métodos existen para vulnerar la seguridad de los
datos.
 Qué tipos de medidas de seguridad en los datos se pueden
implementar.

También podría gustarte