lunes, 17 de diciembre de 2012

Para el examen

-- 3.- Realizar la inserción de, al menos, dos registros por cada una
-- de las tablas a través de la línea de comandos.

-- Incluir algunos registros en los que aparezca una agencia de viajes llamada 'miauto'.



-- Tabla Cliente
INSERT INTO Cliente VALUES ("","48867822X","Manolito Garcia","657228779","Avenida Jose de Mora n8");
INSERT INTO Cliente VALUES ("","58726687V","Antonio Recio Matamoros","677256661","Mirador de Montepinar");

-- Tabla Avala

INSERT INTO Avala VALUES (1,2);
INSERT INTO Avala VALUES (2,1);

-- Tabla Reserva

INSERT INTO Reserva VALUES ("",1,600,True,"miauto");
INSERT INTO Reserva VALUES ("",2,5000,False,"Batmovil");

-- Tabla Fecha_Reserva

INSERT INTO Fecha_Reserva VALUES (1,"2012-05-30","2012-7-3");
INSERT INTO Fecha_Reserva VALUES (2,"2013-08-05",NULL);

-- Tabla Coche

INSERT INTO Coche VALUES ("9871JXD","Honda","Civic","Negro",11);
INSERT INTO Coche VALUES ("7865LOL","Opel","Astra GTC","Rojo",3);

-- Tabla Incluye

INSERT INTO Incluye VALUES (1,"9871JXD",450.50,12);
INSERT INTO Incluye VALUES (2,"7865LOL",320,22);


-- Todo esto lo hacemos identificados como root
--       mysql -u root -p




---4.- Crearse, al menos, dos ficheros de datos para inserción masiva de los mismos en sus correspondientes tablas. Realizar la inserción.

--tabla1
    68912564H    Chuck Norris    670885972    Calle Murillo n5
    71335837T    Amador Rivas    631670091    Calle Corredera n6 2D
    55687803A    Armando Jaleos    669801030    Avenida Jose de Mora n17

--tabla2
    6812WAU    Seat    Leon    \N    1
    5103HAH    Mazda    RX-8    Rojo    3
    9721MNZ    Peugeot    308    Blanco    9

    LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/BD/Ejercicio1/4fichero1'     INTO TABLE Cliente;
    LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/BD/Ejercicio1/4fichero2'     INTO TABLE Coche;

    -- Esto lo ejecutamos una vez identificados como root de la siguiente         -- forma
        mysql -u root -p --local-infile


-- 5.- El cliente de nuestra base datos nos ha llamado y nos dice que necesita
-- saber de los clientes, además, la provincia en que residen que, por defecto,
-- será Granada.

-- Modificar la base de datos para que se contemple esta situación.



ALTER TABLE Cliente ADD (
    Provincia varchar(20) DEFAULT "Granada"
    );

-- Todo esto lo hacemos identificados como root
--       mysql -u root -p



-- 6.- Modificar los precios de los coches de manera que se incremente en un 7%.

UPDATE Incluye SET Precio_Coche=Precio_Coche*1.07;

-- Todo esto lo hacemos identificados como root
--       mysql -u root -p




-- 7.- La agencia 'miauto' ha cambiado de nombre y ahora se llama 'nuestroauto'.
-- Se desea actualizar esta situación en la base de datos.


UPDATE Reserva SET Agencia="nuestroauto" WHERE Agencia="miauto";



-- 8 Crearse un usuario llamado 'cargador_datos' con contraseña de acceso 'mipass'. Este usuario
-- solamente podrá realizar carga de datos masiva desde ficheros.


CREATE USER cargador_datos@'localhost' IDENTIFIED BY 'mipass';
GRANT FILE ON *.* TO cargador_datos@'localhost' IDENTIFIED BY 'mipass';

-- Se aplica el permiso FILE a todas las bases de datos ya que
-- "supùestamente" es un permiso global y da error al aplicarlo
-- a una base de datos especifica.

-- El error 1142 a la hora de ejecutar la inserción desde fichero
-- en el ejercicio 10, se solventa aplicando también permisos de
-- insert.

GRANT INSERT ON *.* TO cargador_datos@'localhost' IDENTIFIED BY 'mipass';


-- Fuerza la aplicación de privilegios en el momento.

FLUSH PRIVILEGES;



--9 Crearse un nuevo fichero de datos para carga masiva para una de las tablas de la base de datos.

69872211K    Ricardin    958112342    Calle Marquez Torres n4
    71395872I    Fulanito    618411267    Calle Cabeza n2

-- Todo esto lo hacemos identificados como root
--       mysql -u root -p




-- 10.- Accediendo con ese usuario, realizar la carga de datos masiva, del fichero
-- creado anteriormente, en nuestra base de datos.


LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/BD/Ejercicio1/9fichero3' INTO TABLE Ejercicio1.Cliente;

-- Identificandonos con cargador_datos:
--       mysql -u cargador_datos -p --local-infile



-- 11.- Comprobar que este usuario no puede realizar una consulta a la base de datos.

SELECT * FROM Ejercicio1.Cliente;

-- Estando identificados como "cargador_datos"

-- Tras ejecutar la consulta la consola devolverá el siguiente error:
-- ERROR 1142 (42000): SELECT command denied to user 'cargador_datos'@'localhost' for table 'Cliente'



-- 12.- Crear un usuario 'mi_otro_yo' con contraseña 'miotropass' que tenga todos los permisos para la base de datos.

CREATE USER mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';
GRANT ALL PRIVILEGES ON *.* TO mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';
GRANT GRANT OPTION ON *.* TO mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';

-- Forzamos la aplicación de privilegios en el momento.

FLUSH PRIVILEGES;

-- Todo esto lo hacemos identificados como root
--       mysql -u root -p



--13 Con este usuario, eliminar el usuario 'cargador_datos' y crearse uno nuevo llamado 'consultor' sin contraseña y que únicamente tenga permisos de realización de consultas sobre la tabla de clientes.


-- meto en consola: mysql -u mi_otro_yo -p --local-infile
    use mysql
    -- para borrar usuarios primero hay que quitarle sus permisos
        REVOKE all privileges ON *.* FROM cargador_datos@localhost;
            -- da error:ERROR 1045 (28000): Access denied for user                 -- 'mi_otro_yo'@'localhost' (using password: YES)

CREATE USER consultor@'localhost';

GRANT select ON *.* TO consultor@'localhost';
    -- da error:mysql> GRANT select ON *.* TO consultor@'localhost';
    -- ERROR 1045 (28000): Access denied for user 'mi_otro_yo'@'localhost' (using password: YES)

    -- Para solucionarlo hay que dar permiso de GRANTS a mi_otro_yo y deja introducirlo.
        -- meto en consola: mysql -u root -p --local-infile
            use mysql
            GRANT grant option ON *.* TO mi_otro_yo@'localhost';

2 comentarios: