Está en la página 1de 14

INVESTIGACION MYSQL

BASE DE DATOS 3

Fecha:3-3-2017
Julio Roberto Gonzlez 2014-08312

Administracion de usuarios Mysql


Mysql es un manejador de base de datos de cdigo libre que ayuda a los usuarios a almacenar,
organizar y recolectar datos. Tiene variedad de opciones para otorgar a determinados usuarios
permisos entre tablas y bases de datos.

Cmo crear un nuevo usuario?

Vamos empezando por crear un usuario nuevo desde la consola de Mysql:

CREATE USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'tu_contrasena';

El nuevo usuario no tiene permisos para hacer algo con las bases de datos. Por consecuencia si el
usuario intenta identificarse (con la contrasea establecida), no ser capaz de acceder a la consola
de Mysql.

Por ello, lo primero que debemos hacer es proporcionarle el acceso requerido al usuario con la
informacin que requiere.

GRANT ALL PRIVILEGES ON * . * TO 'nombre_usuario'@'localhost';

Los asteriscos en este comando hacen referencia a la base de datos y la tabla (respectivamente) a
la cual el nuevo usuario tendr acceso; especficamente este comando permite al usuario leer, editar,
ejecutar y realizar todas las tareas en todas las bases de datos y tablas.

Una vez que has finalizado con los permisos que deseas configurar para tus nuevos usuarios, hay
que asegurarse siempre de refrescar todos los privilegios.

FLUSH PRIVILEGES;
Cmo otorgar permisos de usuario diferentes?

Aqu est una pequea lista del resto de los posibles permisos que los usuarios pueden gozar.

ALL PRIVILEGES: como mencionamos previamente esto permite a un usuario de Mysql acceder a
todas las bases de datos asignadas en el sistema.

CREATE: permite crear nuevas tablas o bases de datos.

DROP: permite eliminar tablas o bases de datos.

DELETE: permite eliminar registros de tablas.

INSERT: permite insertar registros en tablas.

SELECT: permite leer registros en las tablas.

UPDATE: permite actualizar registros seleccionados en tablas.

GRANT OPTION: permite remover privilegios de usuarios.

Para proporcionar un permiso a usuario especfico, puedes utilizar sta estructura:

GRANT [permiso] ON [nombre de bases de datos].[nombre de tabla] TO [nombre de


usuario]@'localhost;

Si deseas darles acceso a cualquier base de datos o tabla, asegrate de insertar un asterisco (*) en
lugar del nombre de la base de datos o tabla.

Cada vez que tu actualizas o cambias permisos, asegrate de refrescar los privilegios mediante:

FLUSH PRIVILEGES; .

Si necesitas remover un permiso, la estructura es casi idntica a la que los asigna:

REVOKE [permiso] ON [nombre de base de datos].[nombre de tabla] FROM [nombre


de usuario]@localhost;

As como puedes borrar bases de datos con DROP, tambin puedes usar el comando DROP para
borrar usuarios:

DROP USER usuario_prueba@localhost;

Para probar el nuevo usuario, debes cerrar sesin escribiendo quit y volviendo a iniciar sesin con
ste comando en la consola:

mysql -u [nombre de usuario]-p


3 de marzo de 2017 Pgina 2
Copias de seguridad en Mysql
Las copias de seguridad son importantes con cualquier tipo de datos, y esto es especialmente
relevante cuando se habla de las bases de datos MySQL, ya que por ejemplo contiene la informacin
de un blog hecho con WordPress.

Cmo hacer copia de seguridad de bases de datos Mysql desde la lnea comandos?

El comando mysqldump se utiliza para crear archivo de texto de bases de datos gestionadas por
Mysql. Estos archivos de texto contienen todos los comandos SQL necesarios para volver a crear la
base de datos a partir de cero.

Si desea una copia de seguridad de una base de datos nica, que slo crea el volcado y enva la
salida a un archivo, usaremos:

mysqldump database_nombre > database_nombre.sql

Mltiples bases de datos se pueden copiar al mismo tiempo:

mysqldump databases database1 database2 > 2databases.sql

Es tambin fcil de copia de seguridad de todas las bases de datos en el servidor:

mysqldump all-databases > all_databases.sql


o
mysqldump all-databases events > all_databases.sql

Restaurar una copia de seguridad

Dado que los archivos de volcado son comandos slo SQL, puede restaurar la copia de seguridad de
base de datos al decirle a Mysql que ejecute los comandos en l y poner los datos en la base de
datos adecuada. Para restaurar un volcado de base de datos creada con mysqldump, simplemente
tienes que usar la consola de Mysql de nuevo.

mysql database < database_nombre.sql

Si usted est tratando de restaurar una nica base de datos de volcado de todas las bases de datos,
usted tiene que dejar Mysql saben cmo esto:

mysql one-database nombre_base_datos < all_databases.sql

3 de marzo de 2017 Pgina 3


Recordar crear la base de datos antes de restaurarla:

mysql -u nombre de usuario -p

En la lnea de comandos de MySQL:

CREATE DATABASE database_name;


exit

A continuacin, podemos cargar el backup anterior

mysql -u nombre de usuario -p database_nombre < database_nombre.sql

Ejemplo: Crear un archivo backupsql.sh que tenga las siguiente lneas:

DATE=`date +%Y%m%d`
SQLFILE=all_databases-${DATE}.sql
mysqldump all-databases events user=root password > $SQLFILE gzip
$SQLFILE

En el crontab la lnea

0 5 * * * /home/al/bin/backupsql.sh

Todos los das a las 5 de la maana hago un backup. Debes buscar la hora de menor carga en tu
servidor.

3 de marzo de 2017 Pgina 4


Funciones matemticas en Mysql
Todas las funciones matemticas retornan NULL en caso de error.

ABS(X)
Retorna el valor absoluto de X.
mysql> SELECT ABS(2);
-> 2
mysql> SELECT ABS(-32);
-> 32
Esta funcin puede usar valores BIGINT.

CEILING(X), CEIL(X)
Retorna el entero ms pequeo no menor a X.
mysql> SELECT CEILING(1.23);
-> 2
mysql> SELECT CEIL(-1.23);
-> -1
Estas dos funciones son sinnimos. Tenga en cuenta que el valor retornado se convierte a BIGINT.

COS(X)
Retorna el coseno de X, donde X se da en radianes.
mysql> SELECT COS(PI());
-> -1

EXP(X)
Retorna el valor de e (la base del logaritmo natural) a la potencia de X.
mysql> SELECT EXP(2);
-> 7.3890560989307
mysql> SELECT EXP(-2);
-> 0.13533528323661

LN(X)
Retorna el logaritmo natural de X, esto es, el logaritmo de X base e.
mysql> SELECT LN(2);
-> 0.69314718055995
mysql> SELECT LN(-2);
-> NULL
Esta funcin es sinnimo a LOG(X).

3 de marzo de 2017 Pgina 5


LOG10(X)
Retorna el logaritmo en base 10 de X.
mysql> SELECT LOG10(2);
-> 0.30102999566398
mysql> SELECT LOG10(100);
-> 2
mysql> SELECT LOG10(-100);
-> NULL
LOG10(X) es equivalente a LOG(10,X).

MOD(N,M) , N % M, N MOD M
Operacin de mdulo. Retorna el resto de N dividido por M.
mysql> SELECT MOD(234, 10);
-> 4
mysql> SELECT 253 % 7;
-> 1
mysql> SELECT MOD(29,9);
-> 2
mysql> SELECT 29 MOD 9;
-> 2
Esta funcin puede usar valores BIGINT.
MOD() tambin funciona con valores con una parte fraccional y retorna el resto exacto tras la divisin:
mysql> SELECT MOD(34.5,3);
-> 1.5

POW(X,Y) , POWER(X,Y)
Retorna el valor de X a la potencia de Y.
mysql> SELECT POW(2,2);
-> 4
mysql> SELECT POW(2,-2);
-> 0.25

SQRT(X)
Retorna la raz cuadrada de un nmero no negativo. X.
mysql> SELECT SQRT(4);
-> 2
mysql> SELECT SQRT(20);
-> 4.4721359549996
mysql> SELECT SQRT(-16);
-> NULL

3 de marzo de 2017 Pgina 6


Funciones de Fecha y Hora en Mysql
Esta funcin es usada para manipular el formato de muestra de una fecha y una hora. Vamos a ver
algunas funciones bsicas para fecha y hora.

CURDATE()
Esta funcin devuelve la fecha actual en formato 'YYYY-MM-DD' o 'YYYYMMDD' (Ao-Mes-Da)
mysql> select curdate(); --> 2007-01-03

CURTIME()
Devuelve la hora actual en formato 'HH:MM:SS' o 'HHMMSS'.
mysql> select curtime(); --> 17:33:07

DATEDIFF(expression1,expression2)
expression1 y expression2 son expresiones fecha o fecha-y-hora. Esta funcin devuelve expression1
expression2 expresados como un valor en das de una fecha a la otra. Aqu slo las partes de fecha
sern consideradas para el clculo.
mysql> select datediff('2007-2-6 17:33:25','2007-1-1'); --> 36

DATE_ADD(fechahora, INTERVAL tipo expresin fechahora)


Esta funcin de fecha aade la expresin a la datetime suministrada.
mysql> select date_add('2007-1-14', interval 15 day); --> 2007-01-29

Esta funcin es la misma para DATE_SUB, pero tomar lugar substrayndola en vez de aadindola.

DAYNAME(fecha)
Devuelve el nombre del da para una fecha especificada.
mysql> select dayname('2007-01-04'); --> Thursday

DAYOFMONTH(fecha) or DAY(fecha)
Devuelve la fecha para el da del mes en el rango de 1 a 31. DAY () es un sinnimo para
DAYOFMONTH().
mysql> select dayofmonth('2007-01-04'); --> 4

DAYOFWEEK(fecha)
Devuelve el da de la semana en formato numrico como 1 para Domingo hasta 7 para Sbado.
mysql> select dayofweek('2007-01-04'); --> 5

DAYOFYEAR(fecha)
Devuelve el da del ao para la fecha dada en formato numrico, en rago de 1 a 366.
mysql> select dayofyear('2007-07-09'); --> 190

HOUR(hora)
Devuelve la hora del tiempo especificado en formato numrico de 0 a 23.
mysql> select hour('14:46:12'); --> 14

3 de marzo de 2017 Pgina 7


MINUTE(hora)
Devuelve el minuto del tiempo especificado en formato numrico de 0 a 59.
mysql> select minute('14:46:12'); --> 46

MONTH(fecha)
Devuelve el mes para la fecha dada en formato numrico en rango de 0 a 12.
mysql> select month('2007-07-09'); --> 7

MONTHNAME(fecha)
Devuelve el nombre del mes para la fecha especificada.
mysql> select monthname('2007-07-09'); --> July

NOW()
Esta funcin de fecha devuelve la fecha y hora actual en formato 'YYYY-MM-DD HH:MM:SS' o
YYYYMMDDHHMMSS (Ao-Mes-Da Hora:Minuto:Segundo)
mysql> select now(); --> 2007-01-04 14:56:15

Funciones de Encriptacin en Mysql


(password,MD5,SHA O SHA1,AES)

Las funciones en esta seccin encriptan y desencriptan valores. Si quiere almacenar resultados de
una funcin de encriptacin que puede contener valores arbitrarios de bytes, use una
columna BLOB en lugar de CHAR o VARCHAR para evitar problemas potenciales con eliminacin de
espacios finales que pueden cambiar los valores de datos.

PASSWORD(str)
Calcula y retorna una cadena de contrasea de la contrasea en texto plano str, o NULL si el
argumento era NULL. Esta es la funcin que se usa para encriptar contraseas MySQL para
almacenar en la columna Password de la tabla user .

mysql> SELECT PASSWORD('badpwd');


-> '7f84554057dd964b'

La encriptacin de PASSWORD() es de un sentido (no reversible).

PASSWORD() no realiza encriptacin de contrasea de la misma forma que se encriptan las


contraseas Unix.

Nota: La funcin PASSWORD() se usa por el sistema de autenticacin en MySQL Server; no debe
usarlo en su propias aplicaciones. Para ese propsito, use MD5() o SHA1() en su lugar.

3 de marzo de 2017 Pgina 8


MD5(str)
Calcula una checksum MD5 de 128-bit para la cadena. El valor se retorna como una cadena binaria
de dgitos 32 hex ,o NULL si el argumento era NULL. El valor de retorno puede usarse como clave
hash, por ejemplo.
mysql> SELECT MD5('testing');
-> 'ae2b1fca515949e5d54fb22b8ed95575'
Este es el "RSA Data Security, Inc. MD5 Message-Digest Algorithm."

SHA1(str), SHA(str)
Calcula una checksum SHA1 de 160-bit para la cadena, como se describe en RFC 3174 (Secure
Hash Algorithm). El valor se retorna como cadnea de 40 dtigos hexadecimales, o NULL si el
argumento era NULL. Uno de los usos posibles para esta funcin es una clave hash. Tambin puede
usarlo como funcin criptogrficamente segura para almacenar contraseas:

mysql> SELECT SHA1('abc');


-> 'a9993e364706816aba3e25717850c26c9cd0d89d'
SHA1() puede considerarse un equivalente criptogrficamente ms seguro que MD5(). SHA() es
sinnimo de SHA1().

AES_ENCRYPT(str,key_str) , AES_DECRYPT(crypt_str,key_str)
Estas funciones permiten encriptacin y desencriptacin de datos usando el algoritmo oficial AES
(Advanced Encryption Standard), conocido anteriormente como "Rijndael." Se usa una encriptacin
con una clave de 128-bit , pero puede ampliarlo hasta 256 bits modificando las fuentes. Elegimos 128
porque es mucho ms rpido y de momento es suficientemente seguro.

Los argumentos de entrada pueden ser de cualquier longitud. Si algn argumento es NULL, el
resultado de esta funcin tambin es NULL.

Si AES_DECRYPT() detecta datos invlidos o relleno incorrecto, retorna NULL. Sin embargo, es
posible para AES_DECRYPT() retornar un valor no NULL (posiblemente basura) si los datos de
entrada o la clave son invlidos.

Puede usar la funcin AES para almacenar datos de forma encriptada modificando sus consultas:

INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));

3 de marzo de 2017 Pgina 9


Puede obtener incluso mejor seguridad si no transfiere la clave a travs de la conexin para cada
consulta, que puede hacerse almacenando la clave en una variable del servidor al hacer la conexin.
Por ejemplo:

SELECT @password:='my password';


INSERT INTO t VALUES (1,AES_ENCRYPT('text',@password));
AES_ENCRYPT() y AES_DECRYPT() pueden considerarse las funciones de encriptacin
criptogrficamente ms seguras disponibles en MySQL.

DBlinks
El concepto central en los sistemas de base de datos distribuidos es un enlace de base de datos . Un
vnculo de base de datos es una conexin entre dos servidores de bases de datos fsicos que permite
a un cliente acceder a ellos como una base de datos lgica.

DataBase Link (DBLink) en oracle es un tipo de objeto que nos permite conectarnos o realizar
conexiones a una base de datos desde otra. La principal funcionalidad de este tipo de objeto es que,
podamos conectarnos a una instancia de DB ocultando el detalle de los datos de conexin, esto sin
importar si la instancia este en el mismo servidor o no.

Qu son los vnculos de base de datos?

Un enlace de base de datos es un puntero que define una ruta de comunicacin unidireccional desde
un servidor de base de datos Oracle a otro servidor de base de datos. El puntero de enlace se define
realmente como una entrada en una tabla de diccionario de datos. Para acceder al enlace, debe estar
conectado a la base de datos local que contiene la entrada del diccionario de datos.

Una conexin de enlace de base de datos es unidireccional en el sentido de que un cliente conectado
a una base de datos local A puede usar un enlace almacenado en la base de datos A para acceder
a informacin en la base de datos remota B, pero los usuarios conectados a la base de datos B no
pueden usar el mismo enlace para acceder a datos en Base de datos A. Si los usuarios locales de la
base de datos B quieren acceder a los datos de la base de datos A, deben definir un enlace que se
almacena en el diccionario de datos de la base de datos B.

Una conexin de enlace de base de datos permite a los usuarios locales acceder a los datos de una
base de datos remota. Para que se produzca esta conexin, cada base de datos del sistema
distribuido debe tener un nombre de base de datos global nico en el dominio de red. El nombre
de base de datos global identifica de forma nica un servidor de base de datos en un sistema
distribuido.

3 de marzo de 2017 Pgina 10


Un ejemplo de usuario scott accediendo a la tabla emp en la base de datos remota con el nombre
global hq.acme.com :

"Figura: Enlace de base de datos"

Los enlaces de base de datos son privados o pblicos. Si son privados, slo el usuario que cre el
enlace tiene acceso; Si son pblicos, todos los usuarios de bases de datos tienen acceso.

Una diferencia principal entre los enlaces de base de datos es la forma en que se producen las
conexiones a una base de datos remota. Los usuarios acceden a una base de datos remota a travs
de los siguientes tipos de enlaces:

3 de marzo de 2017 Pgina 11


Creacin de enlaces de base de datos: ejemplos

Cree vnculos de base de datos utilizando la instruccin CREATE DATABASE LINK . La tabla
proporciona ejemplos de instrucciones SQL que crean vnculos de base de datos en una base de
datos local a la base de datos remota sales.us.americas.acme_auto.com :

Vistas Materializadas

Vista: Una vista es una consulta almacenada que representa un conjunto de tablas
(posiblemente de diferentes esquemas) a la que le vamos a poner un nombre y vamos a tratarla
como si fuese una tabla ms de nuestro esquema, pero sin llegar a ser realmente una tabla. Algo
que tiene que quedar claro es que una vista NO guarda datos, sino que solo almacena la consulta
que nos va a ayudar a acceder a los datos.

Por qu usar vistas?: Es muy sencillo, principalmente hay dos motivos.

1. El primer motivo es de seguridad, a lo mejor no necesitamos que determinados usuarios


acceden a toda la informacin de la base de datos y simplemente queremos formar un
conjunto de datos especficos para dichos usuarios.
2. El segundo motivo tiene que ver con la estructura de nuestro modelo de datos, ya que si
es bastante complejo o con muchas tablas nos puede ser muy til crear este tipo de vistas
para organizar una cierta informacin de modo que nos sea mucho ms cmodo acceder
a ella mediante consultas mucho ms sencillas.

3 de marzo de 2017 Pgina 12


Definicin Vista Materializada
A diferencia de las vistas normales una vista materializada almacena fsicamente los datos
resultantes de ejecutar la consulta definida en la vista. Este tipo de vistas materializadas realizan una
carga inicial de los datos cuando se definen y posteriormente con una frecuencia establecida se
actualizan los datos de la misma. Con la utilizacin de vistas materializadas logramos aumentar el
rendimiento de las consultas SQL adems de ser un mtodo de optimizacin a nivel fsico en modelos
de datos muy complejos y/o con muchos datos.

Una vez definida una vista materializada uno de los problemas que nos encontramos es el de
la actualizacin de los datos. Como se ha comentado antes, estas vistas contienen fsicamente los
datos de las tablas base, por lo que si cambian los datos de estas tablas no se reflejarn en la vista
materializada. Para ello necesitamos establecer un mecanismo de refresco automtico en el que
tendremos que definir el tipo y la forma de refresco.

La sentencia SQL que nos permite definir una vista materializada es esta:

CREATE MATERIALIZED VIEW nombre_vista


[TABLESPACE nombre_ts]
[PARALELL (DEGREE n)]
[BUILD {INMEDIATE|DEFERRED}]
[REFRESH {FAST|COMPLETE|FORCE|NEVER}|{ON COMMIT|ON DEMAND|[START WITH fecha_inicio]
NEXT intervalo}]
[{ENABLE|DISABLE} QUERY REWRITE]
AS SELECT ... FROM ... WHERE ...

Con la palabra BUILD establecemos la forma de carga de datos en la vista.

Con la opcin INMEDIATE (opcin por defecto) se cargarn los datos justo despus de crear la vista.

Con la opcin DEFERRED se definir la vista cuando se ejecute la sentencia SQL sin cargar ningn
dato, que se cargarn cuando se realice el primer refresco de la vista.

Con la palabra REFRESH definimos el mtodo y la frecuencia de refresco de los datos.

La palabra QUERY REWRITE establece si queremos que el optimizador de nuestra base de datos
pueda reescribir las consultas. El optimizador, sabiendo que ya existe una determinada vista
materializada, puede modificar internamente nuestra consulta sobre una determinada tabla, de tal
forma que se mejore el rendimiento de la consulta devolviendo los mismos datos que la consulta
original.

Refresco
Como es entendible la poltica de refresco de cada vista depende altamente de nuestras necesidades
y requerimientos sobre la frecuencia de actualizacin de los datos de las tablas base.

3 de marzo de 2017 Pgina 13


Tipos de refresco
COMPLETE: se borrarn todos los datos de la vista y se volver a ejecutar la consulta definida
en la vista por lo que se recargarn fsicamente los datos de las tablas base.

FAST: podemos decir que este tipo de refresco es una actualizacin incremental, es decir, solo
se refrescarn aquellos datos que se hayan modificado desde el ltimo refresco. Evidentemente
este tipo de refresco es mucho ms fast que el complete. Pero, cmo sabe la base de datos
que datos se han modificado desde el ltimo refresco? lo sabe gracias a que previamente hemos
tenido que crear unos determinados log de la vista (VIEW LOG) sobre cada una de las tablas
base de la vista materializada.

CREATE MATERIALIZED VIEW LOG ON tabla_base


WITH PRIMARY KEY
INCLUDING NEW VALUES;
Hay que decir que si usamos funciones sum, avg, max, min, etctera, no vamos a poder usar
este tipo de refresco.

FORCE: si se puede realizar el refresco tipo FAST se ejecuta, y si no se realiza el


refresco COMPLETE. Es el valor por defecto del tipo de refresco.

NEVER: nunca se realizar un refresco de la vista.

Formas de refresco
Refresco manual: mediante el paquete de PL/SQL DBMS_MVIEW podemos forzar a realizar un
refresco usando para ello la funcin REFRESH.

DBMS_MVIEW.REFRESH('nombre_vista');

Con la funcin REFRESH_DEPENDENT se refrescarn todas las vistas materializadas que


tengan algunas de sus tablas base en la lista de tablas pasada como parmetro de entrada.

DBMS_MVIEW.REFRESH_DEPENDENT('tabla1,tabla2, tabla3,...,tablaN');

Con la funcin REFRESH_ALL_MVIEWS se refrescarn todas las vistas materializadas de


nuestra base de datos.

Refresco automtico: este refresco automtico podemos hacerlo usando la palabra ON


COMMIT, con la que se fuerza al refresco de la vista en el momento en el que se haga
un commit sobre una de las tablas base de dicha vista. Otro tipo de refresco automtico es el
llamado refresco programado, en el cual podemos definir el momento exacto en el que queremos
que se refresque nuestra vista. Para ello tenemos que definir la fecha del refresco en
formate datetime y el intervalo de este.

3 de marzo de 2017 Pgina 14

También podría gustarte