Acceso mysql

32
Administración de MySQL 1 Administración de SGBDR MySQL Gloria Martín Martín Administración de MySQL 2 SEGURIDAD MYSQL

Transcript of Acceso mysql

Page 1: Acceso mysql

Administración de MySQL 1

Administración de SGBDR MySQL

Gloria Martín Martín

Administración de MySQL 2

SEGURIDAD MYSQL

Page 2: Acceso mysql

Administración de MySQL 3

Seguridad MYSQLÍndice

Introducción al Sistema de seguridad MySQLGestión de usuarios y permisosCopias de seguridadSeguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Administración de MySQL 4

Seguridad MYSQL Índice

Introducción al Sistema de seguridad MySQLGestión de usuarios y permisosCopias de seguridadSeguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 3: Acceso mysql

Administración de MySQL5

Seguridad en MYSQL Introducción al Sistema de seguridad MySQL

MySQL utiliza Listas de Control de Accesos (ACL) en todas las conexiones, consultas y operacionesAlgunos consejos:

No dar acceso a la tabla user en la BD mysqlUtilizar GRANT y REVOKE para implantar una política de seguridad cerrada

No almacenar claves en la BD sin cifrarInstalar un cortafuegos en el servidor de MySQL

Utilizar passwords para todos los usuarios de MySQL

No ejecutar el “demonio” mysqld como usuario rootComprobar que este usuario (normalmente mysql ) es el único con permisos de lectura/escritura en los directorios de datosEl usuario mysql NO debe acceder por consolaNo dar los privilegios PROCESS y FILE a todos los usuarios

Administración de MySQL 6

Seguridad MYSQL Índice

Introducción al Sistema de seguridad MySQLGestión de usuarios y permisos

Gestión de usuariosEl sistema de permisos MySQL

Copias de seguridadSeguridad al conectarseSeguridad de aplicacionesSeguridad del sistemaProblemas de seguridad relacionados con LOAD DATA LOCAL

Page 4: Acceso mysql

Administración de MySQL7

Seguridad en MYSQL Usuarios

Gestión de usuarios

Nombres de usuario:

No tienen nada que ver con los nombres de usuario de linux, aunque si no se proporciona -u utiliza el usuario de login

Máximo 16 caracteres de longitud

Las contraseñas MySQL no tienen nada que ver con las contraseñas del SO.

MYSQL encripta con PASSWORD() y Unix con ENCRYPT()

mysql_install_db inicializa las tabas de permisos

Administración de MySQL8

Seguridad en MYSQL Usuarios

Gestión de usuarios

Creación de usuarios:Forma 1: Manipular las tablas de MySQL directamente

EjemplosINSERT INTO db VALUES('localhost','zoologico','admin','Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N');FLUSH PRIVILEGES;

Forma 2: Create userEjemplos

CREATE USER pepe IDENTIFIED BY 'passpepe'Añadido en MySQL 5.0.2Crea un usuario en la tabla user con todos los permisos a N, como GRANT usage

Page 5: Acceso mysql

Administración de MySQL9

Seguridad en MYSQL Usuarios

Gestión de usuarios

Forma 3: Utilizar GRANTGRANT ALL PRIVILEGES ON *.* TOgloria'@'localhost' IDENTIFIED BY 'mipassword' WITH GRANT OPTION;

GRANT SELECT ON nombrebd.* TO usu1 IDENTIFIED BY 'laclave';

GRANT SELECT ON nombrebd.TABLA TO usu1 IDENTIFIED BY 'laclave';

GRANT SELECT(columna) ON nombrebd.tabla TOusu@'localhost'

GRANT USAGE ON *.* TO nada@localhost;

SHOW GRANTS FOR usu1;

Administración de MySQL10

Seguridad en MYSQL Usuarios

Gestión de usuarios

Especificar usuario@host:Si no llevan caracteres especiales no necesitan comillasSi los llevan si: 'usuario-1'@'maquina-virtual'Comodines en el host:

% se refiere a cualquier cadena_ se refiere a cualquier carácterusuario@'%.upm.es'usuario@'192.168.1.%'usuario@'192.168.0.12_'

El nombre de usuario no soporta comodinesusuario solo equivale a usuario@'%'usuario@'%' no incluye usuario@'localhost'usuario anónimo es ' '@'localhost'GRANT permite:

Nombres de equipo: 60 caracteresNombres de db, tablas, columnas y rutinas: 64 caracteresNombres de usuario :16 caracteres

Page 6: Acceso mysql

Administración de MySQLAdministración de MySQL11

Seguridad en MYSQL Usuarios

Gestión de usuarios

Todos los permisos (para GRANT y REVOKE):ALL [PRIVILEGES] Da todos los permisos simples excepto GRANT OPTION ALTER Permite el uso de ALTER TABLE ALTER ROUTINE Modifica o borra rutinas almacenadasCREATE Permite el uso de crear tablas, bd, … pero no índices. CREATE ROUTINE Crea rutinas almacenadasCREATE TEMPORARY TABLES Permite el uso de CREATE TEMPORARY TABLE CREATE USER Permite el uso de CREATE USER, DROP USER, RENAME USER, y REVOKE ALL PRIVILEGES.CREATE VIEW Permite el uso de CREATE VIEW DELETE Permite el uso de DELETE

Administración de MySQL12

Seguridad en MYSQL Usuarios

Gestión de usuariosTodos los permisos (para GRANT y REVOKE):

DROP Permite el uso de DROP TABLE o DROP DATABASEEXECUTE Permite ejecutar procedimientos almacenadosFILE Permite leer y escribir archivos en el servidor. Permite leer cualquier fichero del servidor y situarlo en una tabla, que puede entonces consultarse con selectINDEX Permite el uso de CREATE INDEX y DROP INDEX INSERT Permite el uso de INSERT LOCK TABLES Permite el uso de LOCK TABLES en tablas para las que tenga el permiso SELECT PROCESS Permite el uso de SHOW PROCESSLIST. Permite ver el texto (código) correspondiente a una consulta en ejecuciónRELOAD Permite el uso de FLUSH

Page 7: Acceso mysql

Administración de MySQL13

Seguridad en MYSQL Usuarios

Gestión de usuarios

Todos los permisos (para GRANT y REVOKE):REPLICATION CLIENT Permite al usuario preguntar dónde están los servidores maestro o esclavoREPLICATION SLAVE Necesario para los esclavos de replicación (para leer eventos del log binario desde el maestro)SELECT Permite el uso de SELECT SHOW DATABASES permite SHOW DATABASES muestra todas las bases de datosSHUTDOWN Permite usar mysqladmin shutdown, detener el servidorSUPER Permite el uso de comandos CHANGE MASTER, KILL, PURGE MASTER LOGS, y SET GLOBAL , el comando mysqladmin debug le permite conectar (una vez) incluso si se llega a max_connectionsUPDATE Permite el uso de UPDATE USAGE Sinónimo de “no privileges”GRANT OPTION permite ceder a otro usuario los privilegios que se poseen

Administración de MySQL14

Seguridad en MYSQL Usuarios

Gestión de usuarios

Ver permisos:SHOW GRANTS; del usuario conectado actualmenteSHOW GRANTS FOR USER;

SHOW GRANTS FOR root@'localhost'

SHOW GRANTS FOR CURRENT_USER();

Page 8: Acceso mysql

Administración de MySQL15

Seguridad en MYSQL Usuarios

Gestión de usuarios

Nivel de permisos:GRANT y REVOKE crean usuarios y conceden y revocan derechos a 4 niveles de privilegio:

*.* Global. Todas las tablas de todas las bdTabla: usergrant select on *.* to juan identified by 'juan';

bd.* Nivel de db.Todas las tablas de la db bd (* es db actual)Tablas: user y dbgrant select on tienda.* to juan2 identified by 'juan2';

bd.tabla Nivel de tabla.La tabla tabla de la base de datos bdTablas: user y tables_privgrant select on tienda.productos to juan3 identified by 'juan3';

PRIVILEGIO(columna) ON bd.tabla Nivel de columna. La columa columna de la tabla tabla de la base de datos bdTabla: user, tables_priv y columns_privgrant select(precio) on tienda.productos to juan4 identified by 'juan4';

Administración de MySQL16

Seguridad en MYSQL Usuarios

Gestión de usuarios

Quitar permisosREVOKE borra los permisos no el usuario (no lo borra de la tabla user)

grant select(precio) on tienda.productos to juan4 identified by 'juan4';revoke select(precio) on tienda.productos from juan4;

Borra de columns_priv y tables _priv no de user

grant select on tienda.productos to juan3 identified by 'juan3';revoke select on tienda.productos from juan3;

Borra de tables _priv no de user

grant select on tienda.* to juan2 identified by 'juan2';revoke select on tienda.* from juan2;

Borra de db no de user

grant select on *.* to juan identified by 'juan';revoke select on *.* from juan;

Pone a N la columna select_priv pero no lo borra de user.

Page 9: Acceso mysql

Administración de MySQL17

Seguridad en MYSQL Usuarios

Gestión de usuarios

Renombrar usuariosRENAME USER old_user TO new_user

Eliminar usuariosDROP USER usuario@'localhost';

Antes de MySQL5.0.2 solo borraba cuentas sin permisosAhorra borra el usuario de todas las tablas (por lo tanto borratambién sus permisos)DROP USER no cierra automáticamente ninguna sesión de usuario. Tiene efecto cuando cierra sesión.

DELETE FROM user WHERE user='usuario'

drop user juan, juan2;

delete from user where user like '%juan%';

Administración de MySQL18

Seguridad en MYSQL Usuarios

Gestión de usuarios

Asignar contraseñas1. shell# mysqladmin -u usuario -h equipo password

"newcntr"

2. mysql> SET PASSWORD FOR 'lola'@'%' = PASSWORD('lolita');

3. mysql> GRANT USAGE ON *.* TO 'lola'@'%' IDENTIFIED BY 'lolita';

4. shell> mysql -u root mysqlmysql> UPDATE user SET Password =

PASSWORD('lolita') WHERE Host = '%' AND User = 'lola';

mysql> FLUSH PRIVILEGES;

Cambiar tu propia contraseñamysql> SET PASSWOR= PASSWORD('mipass');

Page 10: Acceso mysql

Administración de MySQL19

Seguridad en MYSQL Usuarios

Gestión de usuarios

Limitación de recursos de usuarios:Limitar el número de conexiones de un usuario:

MAX_CONNECTIONS_PER_HOUR 5Número de conexiones por hora

MAX_USER_CONNECTIONS 2Número de conexiones simultaneas que puede tener abiertas un usuario

Limitar lo que puede hacer el usuario una vez conectado:MAX_QUERIES_PER_HOUR 20

Número de querys por horaMAX_UPDATES_PER_HOUR 10

Número de actualizaciones por hora

Administración de MySQL20

Seguridad en MYSQL Usuarios

Gestión de usuarios

Limitación de recursos de usuarios:Por defecto los límites se ponen a 0

Para eliminar un límite existente ponerlo a 0

FLUSH USER_RESOURCES

Reinicia los contadores actuales a cero para todas las cuentas

También con FLUSH PRIVILEGES o mysqladmin reload

Estos reinicios de contadores no afectan a

MAX_USER_CONNECTIONS

Todos los contadores empiezan a cero cuando el servidor arranca; los

contadores no se guardan al reiniciar, incluido max_user_connections

Page 11: Acceso mysql

Administración de MySQL21

Seguridad en MYSQL Usuarios

Gestión de usuarios

Limitación de recursos de usuarios:Crear una cuenta con límites:

GRANT SELECT ON tienda.* TO francisco@'localhost'IDENTIFIED BY 'fran'WITH MAX_QUERIES_PER_HOUR 20

MAX_UPDATES_PER_HOUR 10MAX_CONNECTIONS_PER_HOUR 5MAX_USER_CONNECTIONS 2;

Cambiar los límites de una cuenta existente:GRANT USAGE ON *.* TO 'francisco'@'localhost' WITH MAX_QUERIES_PER_HOUR 10;

Los límites se guardan en la tabla user:select user, host, select_priv, max_questions, max_updates, max_connections, max_user_connectionsfrom user;

Administración de MySQL22

Seguridad en MYSQL Usuarios

Gestión de usuarios

Evitar concesión de privilegios peligrosos:Cualquier privilegio en la base de datos mysql. ALTER.

El usuario puede modificar las tablas de privilegios, p.e cambiar el nombre de user

DROP. El usuario podría borrar tablas como user.

FILE.EL usuario puede leer archivos del servidor y crear archivos en el servidor

GRANT. El usuario puede otorgar sus privilegios a otros, que pueden no ser tan fiables como el usuario original.

PROCESS.El usuario puede ver las consultas en ejecución incluyendo las que usen contraseñas.

SHUTDOWN.Permite cerrar el servidor y denegar todos los accesos al mismo.

Page 12: Acceso mysql

Administración de MySQL23

Seguridad en MYSQL Usuarios

Gestión de usuarios

Conexiones SSLPor defecto, la conexión entre el cliente y el servidor no estácodificada. Cifrar datos ofrece seguridad pero el sistema se ralentiza.Comprobar si una instalación existente de MySQL es compatible con SSL

SHOW VARIABLES LIKE '%ssl';

Arrancar el servidor con soporte ssl:mysqld_safe --user=mysql --ssl &

Conectarse con ssl (el usuario enviará datos cifrados al servidor):

mysql –u usuario –p --ssl

Administración de MySQL 24

Seguridad MYSQL Índice

Introducción al Sistema de seguridad MySQLGestión de usuarios y permisos

Gestión de usuariosEl sistema de permisos MySQL

Copias de seguridadSeguridad al conectarseSeguridad de aplicacionesSeguridad del sistemaProblemas de seguridad relacionados con LOAD DATA LOCAL

Page 13: Acceso mysql

Administración de MySQL25

Seguridad MYSQLUsuarios

Sistema de Privilegios

Función del Sistema de Privilegios:Autentificar a un usuario que se conecta desde un host y asociarle privilegios de base de datos“Asegurar que los usuarios hacen aquello que se les permite hacer”

Identidad:Nombre del usuarioHost desde el que se conecta el usuario

El sistema concede privilegios de acuerdo a:La identidad (quién, desde dónde)Lo que se quiere hacer (qué)

Administración de MySQL26

Seguridad MYSQLUsuarios

Sistema de Privilegios

Los privilegios se almacenan en estas 5 tablas:1. user:

Contiene los privilegios globales y las claves encriptadas. Determina que hosts y usuarios pueden conectarse.

2. host: Asigna privilegios por host, independientemente del usuario. No es modificada por GRANT y REVOKE, hay que manejarla “a mano” y en la mayoría de las instalaciones MySQL queda sin utilizarSe usa para propósitos específicos:

Lista de host seguros: con todos los privilegios a Y y desde esas máquina cualquier usuario tendría esos privilegios.Poner lista de host inseguros con todos los privilegios a N

Page 14: Acceso mysql

Administración de MySQL27

Seguridad MYSQLUsuarios

Sistema de Privilegios

3. db: Establece los privilegios para bases de datos.

4. tables_priv:Establece los privilegios para cada tabla.

5. columns_priv: Establece los privilegios para cada columna de cada tabla.

Administración de MySQLAdministración de MySQL28

Seguridad MYSQLUsuarios

Sistema de Privilegios

Control de acceso:

El control de acceso de MySQL consiste en dos fases:

1. Determinar si el usuario se puede conectar.

2. Asumiendo que se puede conectar, comprobar cada petición y determinar si se tienen suficientes privilegios para realizarla.

Page 15: Acceso mysql

Administración de MySQL29

Seguridad MYSQLUsuarios

Sistema de Privilegios

Fase 1: Verificación de la conexiónIdentidad = host + nombreUsuarioEl servidor da acceso si

a) una fila en la tabla user coincide con el host y el usuariob) se suministra la clave (password) correcta

Administración de MySQL31

Seguridad MYSQLUsuarios

Sistema de Privilegios

Fase 2: Verificación de la petición (consulta)Se verifica cada petición para ver si el usuario tiene suficientes privilegios para realizarlaConsulta las tablas user, db, host, tables_priv y columns_priv en orden

Los criterios de aplicación (matching) son distintos para cada tabla:1. En user se utilizan host, user y password.2. En host se utilizan host y db.3. En db se utilizan user, host y db.4. En tables_priv se utilizan user, host, db y table.5. En columns_priv se utilizan user, host, db, table y column.

Page 16: Acceso mysql

Administración de MySQL32

Seguridad MYSQLUsuarios

Sistema de Privilegios

Fase 2: Verificación de la petición (consulta)1. user:

Permisos que afectan a todas las BD. Si tienes SELECT en user puedes seleccionar en cualquier tabla de cualquier bd de todo el servidor. Mejor poner a N y conceder en otras tablasSon privilegios de superusuarioCiertos permisos sólo se pueden dar en la tabla user, así que MySQL no mira más

2. db y host: ver si tienes permisos sobre la base de datos: select user,host,db from db;

3. Tables_priv:select user,host,db,table_name fromtables_priv;

Columns_privs: select user,host,db,table_name,column_namefrom colums_priv;

Administración de MySQL 33

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 17: Acceso mysql

Administración de MySQL34

Seguridad MYSQLCopias de Seguridad

Introducción

Las copias de seguridad son una tarea fundamentalGuardar una copia de my.cnfMétodos para copias de seguridad de bases de datos

Backup y restore

Copia de archivos

Mysqldump

Mysqlhotcopy

Selec into y load data infile

Mysqlimport

Copias de seguridad de tablas InnoDBEl registro binario

Administración de MySQL 35

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 18: Acceso mysql

Administración de MySQL36

Seguridad MYSQLCopias de Seguridad

BACKUP Y RESTORE

Para hacer copias se puede utilizar:

BACKUP TABLEBACKUP TABLE tabla1,tabla2 TO /db_backup_path';

RESTORE TABLERESTORE TABLE nombre_de_tabla FROM /db_backup_path';

db_backup_path: debe ser un directorio, no un archivoNo puede restaurar sobre una base de datos existente

Backup automáticamente bloqueaba las tablasSólo con tablas MyISAMObsoleto

Administración de MySQL 37

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 19: Acceso mysql

Administración de MySQL38

Seguridad MYSQLCopias de Seguridad

Copia de archivos

Es fácil hacer backups MYISAM porque las tablas se almacenan en ficheros dentro de directorios denominados como las tablas:

.frm para la definición

.MYD para los datos

.MYI para los índicesBloquear manualmente tablas o hacer la copia con el servidor offPara ver el directorio de datos:

SHOW VARIABLES like 'datadir';Para hacer una copia consistente:

a) LOCK TABLES noticias READ, clientes READ; (hay que bloquear manualmente)b) FLUSH TABLES noticias,clientes;c) cp /usr/local/mysql/data/anuncios/*.* /backups

Restaurar:cp –r /backups/basedatos/ /usr/local/mysql/data/chown mysql basedatos.*

Administración de MySQL 39

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 20: Acceso mysql

Administración de MySQL40

Seguridad MYSQLCopias de Seguridad

Mysqldump

Genera las sentencias SQL necesarias para reconstruir la BD.Sirve para todo tipo de tablas.

COPIA:mysqldump -u root -ppuestoXX tienda productos > /backups/productos_2009_09_09.sql

RESTAURACIÓNmysql -u root -ppuestoXX tienda < /backups/productos_2009_09_09.sql

Se puede ver el archivo con el vi

Administración de MySQL41

Seguridad MYSQLCopias de Seguridad

Mysqldump

PERMITE SELECCIONAR FILASmysqldump -u root -p tienda productos --where fabricante='4' > /backups/productos4.sql

Volcarla en otra base de datos:mysql -u root -p tienda4 < /backups/productos4.sql

PERMITE COPIAR LA BD ENTERA (todas sus tablas, la bdsiempre hay que crearla):

/usr/local/mysql/bin/mysqldump -u root -p tienda > /backups/tienda.sql

Page 21: Acceso mysql

Administración de MySQL42

Seguridad MYSQLCopias de Seguridad

Mysqldump

Opciones interesantes de mysqldump:-v

muestra información cuando crea la copia

--add-drop-tableAñade código a la salida de mysqldump para borrar una tabla antes de crearla.

--all-databases-d

Especifica que deben volcarse los datos, pero no la estructura.

-t Indica que se desea volcar la estructura pero no los datos.

Administración de MySQL43

Seguridad MYSQLCopias de Seguridad

Mysqldump

-e, --extended-insertUtiliza la sintaxis de INSERT multilínea. (Proporciona sentencias de insert más compactas y rápidas.)

-hServidor de Mysql a usar. Por defecto es localhost.

q, --quickNo almacena en el buffer la sentencia, la copia directamente a la salida.

---optLo mismo que --quick --add-drop-table --add-locks --extended-insert --lock-tables. Esta opción permite realizar la copia de seguridad de la base de datos de la forma más rápida y efectiva.En MySQL 5.0, --opt está activado por defecto, pero puede desactivarse con --skip-opt.

Page 22: Acceso mysql

Administración de MySQL 44

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Administración de MySQL45

Seguridad MYSQLCopias de Seguridad

Mysqlhotcopy

Es una secuencia de comandos de Perl para realizar copias en línea de la bdSólo sirve para tablas MyISAMNo hace falta parar el servidor, mysqlhotcopy bloquea las tablas y genera copias de los ficheros de almacenamiento en el directorio indicado.Si hay mucho tráfico o muchas tablas, el bloqueo de mysqlhotcopy puede influir en el rendimiento.La recuperación es sencilla. Paras el servidor y copias los ficheros en el directorio de datos.Sólo puede ejecutarse en la misma máquina donde está el directorio de base de datos. (no se puede hacer copia de bd de otra máquina)

Page 23: Acceso mysql

Administración de MySQL46

Seguridad MYSQLCopias de Seguridad

Mysqlhotcopy

Sintaxis mysqlhotcopy:mysqlhotcopy anuncios /backups -u root -p puestoXX

Lee los grupos de opciones [client] y [mysqlhotcopy] de los ficheros de opciones.

Para restablecer una copia de seguridad:Sustituir los archivos en el directorio de datos, como si se hubieran hecho las copias directamente

/etc/init.d/mysql stopcp -r /anuncios /usr/local/mysql/datachown -R mysql.mysql /usr/local/mysql/data/anuncios

/etc/init.d/mysql start

Hay que poder ejecutar secuencias de comandos Perl

Administración de MySQL 47

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 24: Acceso mysql

Administración de MySQL48

Seguridad MYSQLCopias de Seguridad

Select into y load data

Es similar a mysqldump ya que crea un archivo que se utiliza para volver a crear la tabla de volcado.Opuesto a LOAD DATA INTO. El archivo resultante sólo se puede crear en el servidor MySQL, no en ningún otro sistema. Sintaxis:

SELECT … INTO OUTFILE'ruta_y_nombre_de_archivo'

Opciones:FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '\n';

Administración de MySQL49

Seguridad MYSQLCopias de Seguridad

Select into y load data

Ejemplos:

SELECT * FROM productos INTO OUTFILE '/backups/ productos.dat';

SELECT * FROM productos INTO OUTFILE '/backups/ productos 2.dat'

FIELDS TERMINATED BY 'zz';

SELECT * FROM productos INTO OUTFILE '/backups/ productos 3.dat'

FIELDS TERMINATED BY '|' LINES TERMINATED BY '[end]';

SELECT * FROM productos INTO OUTFILE '/backups/ productos 4.dat'

FIELDS TERMINATED BY '|' ENCLOSED BY '"' LINES TERMINATED BY '\n';

SELECT id_producto,nombre,precio FROM productos INTO OUTFILE

'/db_backups/ productos 5.dat‘

FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' LINES

TERMINATED BY '\n';

Page 25: Acceso mysql

Administración de MySQL50

Seguridad MYSQLCopias de Seguridad

Select into y load data

Para restaurar una tabla creada con SELECT INTO, se utiliza la instrucción LOAD DATA.

LOAD DATA INFILE 'productos5.dat' [REPLACE | IGNORE] INTO TABLE productos FIELDS TERMINATED BY '|'OPTIONALLY ENCLOSED BY '"'LINES TERMINATED BY '\n'

Administración de MySQL51

Seguridad MYSQLCopias de Seguridad

Select into y load data

La cláusula LOCAL indica que el fichero está en el ordenador del cliente.

Problemas de seguridad con LOAD DATA LOCALCualquiera puede cargar archivos locales en una tabla y leerlos

El fichero de texto se buscará en el servidor, concretamente en el mismo directorio donde esté la base de datos.Las cláusulas REPLACE e IGNORE afectan al modo en que se tratan las filas repetidas.

REPLACE sustituirá la fila actual por la leída. IGNORE el valor leído será ignorado.

Page 26: Acceso mysql

Administración de MySQL 52

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Administración de MySQL53

Seguridad MYSQLCopias de Seguridad

Mysqlimport

SELECT INTO y LOAD DATA se ejecutan desde MySQL Sus equivalentes de línea de comandos son:

Exportar la consulta:mysql -u root -ppuestoXX anuncios -e "SELECT * FROM noticias" > noticias.txt

mysqlimport:mysqlimport anuncios noticias.txt

La tabla a la que importar los datos viene determinada por el nombre de archivo.mysqlimport elimina la extensión del nombre de archivonoticias.txt se importa dentro de la tabla noticias.

mysqlimport --replace anuncios/backups/noticias.txt –u root –p

Page 27: Acceso mysql

Administración de MySQL 54

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Administración de MySQL55

Seguridad MYSQLCopias de Seguridad

Copias de tablas InnoDB

En caliente InnoDB Hot Backup herramienta de pagoxtrabackup libre (falta depurar)

Parando el servidorCopia de respaldo + mysqldump

Detener el servidor MySQL y asegurarse de que lo hace sin errores.

Copiar todos los ficheros de datos (ficheros ibdata e .ibd). Copiar todos los ficheros ib_logfileCopiar el o los ficheros de configuración my.cnfCopiar todos los ficheros .frm de las tablas InnoDB

Page 28: Acceso mysql

Administración de MySQL56

Seguridad MYSQLCopias de Seguridad

Copias de tablas InnoDB

mysqldump es conveniente también porque un fichero binario podría corromperse sin que el usuario lo noteCopia:/etc/init.d/mysql stopcd /usr/local/mysql/datacp my.cnf /backups/cp tienda/productos.frm /backups/cp ibd* /backups/cp /usr/local/mysql/var/ib_* /backups/

Perdida de datos:TRUNCATE productos;

Reparación:/etc/init.d/mysql stopcp /backups/ibd* /usr/local/mysql/data/cp /backups/ib_* /usr/local/mysql/var/

Administración de MySQL 57

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridad

IntroducciónBackup y restoreCopia de archivosMysqldumpMysqlhotcopySelec into y load data infileMysqlimportCopias de seguridad de tablas InnoDBEl registro binario

Seguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 29: Acceso mysql

Administración de MySQL58

Seguridad MYSQLCopias de Seguridad

El registro binario

En el fichero my.cnf activar:

log-bin=log-bin

MysqbinlogHerramienta para ver los logs binarios (no se ven con vi).

mysqlbinlog mysql-bin.000001

Concatenando la instrucción mysql ejecutamos su contenido:

mysqlbinlog mysql-bin.000001 | mysql tienda

Opciones de mysqlbinlog--start-position : Empieza a leer en esa posición

--stop-position: Deja de leer en esa posición

--start-date: Empieza a leer en esa fecha

--stop-date : Deja de leer en esa fecha

--to-last-log: No lee sólo el actual sino hasta el final (necesita –R)

Administración de MySQL 59

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridadCopias de seguridadSeguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Page 30: Acceso mysql

Administración de MySQL60

Seguridad MYSQLSeguridad al conectarse

Contraseña en línea de comandosPuede verse en el historialProgramas como ps lo pueden ver

Contraseña cuando se nos soliciteSe oculta la contraseña con *Solo para programas que se ejecutan de manera interactiva

Administración de MySQL61

Seguridad MYSQLSeguridad al conectarse

Contraseña en un archivo de opcionesProteger los ficheros my.cnf : chmod 600 my.cnf

Root del sistema siempre puede leer este archivo. Asegurarse de que el usuario root del sistema no es el usuario root de MySQLAsegurarse de que el usuario mysql no tiene shell (/etc/passwd)No almacenar un archivo de configuración que contenga una contraseña en el Árbol Web.

Contraseña en la variable de entrono MYSQL_PWDInseguro, no se recomienda# export MYSQL_PWD=puestoXX# echo $MYSQL_PWD# mysql –u root

Page 31: Acceso mysql

Administración de MySQL 62

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridadCopias de seguridadSeguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Administración de MySQL63

Seguridad MYSQLSeguridad en las aplicaciones

Verificar los datos introducidos por los usuarios.Intrusión poniendo comillas en un formulario Web:SELECT * FROM contraseñas WHEREusuario='$usuario' AND contraseña= '$contraseña'

Si $contraseña= aaa' DELETE FROM contraseñas borraría contraseñas.Los lenguajes permiten ignorar las comillas

mysql_real_escape_string() en C addslashes ( ) en PHP

Compruebe el tamaño de los datos, no es lo mismo 2 que 2000 registros.Elimine los caracteres especiales de las cadenas pasadas a MySQL.

Page 32: Acceso mysql

Administración de MySQL 64

Seguridad MYSQL Índice

IntroducciónGestión de usuarios y permisosCopias de seguridadCopias de seguridadSeguridad al conectarseSeguridad de aplicacionesSeguridad del sistema

Administración de MySQL65

Seguridad MYSQLSeguridad en el sistema

Nunca debe permitir el acceso al sistema como usuario mysql; debe reservarlo únicamente para la propia base de datos

Separe el directorio de datos.

Proteja el directorio de datos (nadie debe poder leer y mucho menos escribir en el directorio de datos MySQL).Permisos 700

Ejecute MySQL como su propio usuario.