acceso mysql
TRANSCRIPT
![Page 1: Acceso mysql](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022050804/5530a0534a7959f7328b4816/html5/thumbnails/32.jpg)
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.