Resumen Seguridad en MySQL

28
Rodríguez Contreras Isúi Equipo Nieto Ramírez Dhalma Guadalupe 10 SEGURIDAD EN MYSQL 1.- Seguridad Los factores generales que afectan a la seguridad. Estos incluyen la elección de una buena contraseña, que no conceda privilegios innecesarios a los usuarios Seguridad de la propia instalación. Los archivos de datos, archivos de registro y los archivos de todas las aplicaciones de su instalación debe ser protegido para asegurar que no se pueden leer o escribir por personas no autorizadas Control de acceso y seguridad en el sistema de base de datos en sí, incluyendo a los usuarios y bases de datos Red de seguridad de MySQL y el sistema.La seguridad está relacionada con las subvenciones para los usuarios individuales Tener copias de seguridad adecuadas y apropiadas de los archivos de base de datos de configuración y los archivos de registro. 2.- Guia de Seguridad MySQL utiliza seguridad basada en Listas de Control de Acceso (ACL) para todas las conexiones, consultas y otras operaciones que los usuarios pueden intentar realizar. También hay soporte para conexiones cifradas mediante SSL entre clientes y servidores MySQL No volver a dar a nadien el acceso al usuario en la tabla mysql base de datos.

Transcript of Resumen Seguridad en MySQL

Page 1: Resumen Seguridad en MySQL

Rodríguez Contreras Isúi EquipoNieto Ramírez Dhalma Guadalupe 10

SEGURIDAD EN MYSQL

1.- Seguridad

Los factores generales que afectan a la seguridad. Estos incluyen la elección de una buena contraseña, que no conceda privilegios innecesarios a los usuarios

Seguridad de la propia instalación. Los archivos de datos, archivos de registro y los archivos de todas las aplicaciones de su instalación debe ser protegido para asegurar que no se pueden leer o escribir por personas no autorizadas

Control de acceso y seguridad en el sistema de base de datos en sí, incluyendo a los usuarios y bases de datos

Red de seguridad de MySQL y el sistema.La seguridad está relacionada con las subvenciones para los usuarios individuales

Tener copias de seguridad adecuadas y apropiadas de los archivos de base de datos de configuración y los archivos de registro.

2.- Guia de Seguridad

MySQL utiliza seguridad basada en Listas de Control de Acceso (ACL) para todas las conexiones, consultas y otras operaciones que los usuarios pueden intentar realizar. También hay soporte para conexiones cifradas mediante SSL entre clientes y servidores MySQL

No volver a dar a nadien el acceso al usuario en la tabla mysql base de datos. Utilice el GRANT y REVOKE instrucciones para controlar el acceso a MySQL. No

otorgue más privilegios de los necesarios. Nunca conceder privilegios a todos los hosts.

Utilice el SHOW GRANTS declaración para comprobar qué cuentas tienen acceso a qué. A continuación, utilice elREVOKE declaración de eliminar los privilegios que no son necesarias

No guarde las contraseñas en texto plano en su base de datos. Si el equipo se ve comprometida, el intruso podría obtener la lista completa de claves y utilizarlas. En su lugar, utilice SHA2 () , SHA1 () , MD5 () , o alguna otra de un solo sentido función hash y almacenar el valor hash.

No elija claves de los diccionarios. Existen programas especiales para romper contraseñas.

Invierta en un firewall. Esto lo protege de al menos el 50% de todos los tipos de vulnerabilidades de cualquier software. Ponga MySQL tras el firewall o en una zona desmilitarizada (DMZ).

Page 2: Resumen Seguridad en MySQL

Intente escanear sus puertos desde Internet utilizando una herramienta como nmap . MySQL utiliza el puerto 3306 por defecto. Este puerto no debería ser accesible desde lugares no confiables.

utilice un protocolo de cifrado como SSL o SSH. MySQL soporta conexiones SSL internas. Otra técnica es utilizar SSH reenvío de puertos para crear una conexión cifrada (y comprimido) túnel para la comunicación.

Usuario Final Guías para la Seguridad Contraseña

Los métodos más seguros son para que el programa cliente solicita la contraseña o

para especificar la contraseña en un fichero de opciones debidamente protegidos.

Utilice un -p your_pass o - password = your_pass opción en la línea de comandos. Esto es conveniente pero inseguro . En algunos sistemas, la contraseña se hace visible a los programas de estado del sistema, como ps que pueden ser invocados por otros usuarios para mostrar líneas de comandos.

Utilice el p- o - password opción en la línea de comandos sin ningún valor la

contraseña especificados. En este caso, el programa cliente solicita la

contraseña de manera interactiva , este método de introducción de una

contraseña es adecuado sólo para los programas que se ejecutan de forma

interactiva.

 Guarde su contraseña en un fichero de opciones. Por ejemplo, en Unix, se

puede enumerar la contraseña en el[cliente] sección del my.cnf. archivo en el

directorio de inicio. Guarde su contraseña en el MYSQL_PWD variable de entorno, este método de

suministrar la contraseña MySQL debe ser considerado extremadamente inseguro. Algunas versiones de ps incluyen una opción para visualizar el entorno de los procesos en ejecución.

Directrices para la Seguridad de la contraseña de administrador

Los administradores de bases de datos debe utilizar las siguientes pautas para

mantener las contraseñas seguras.

Los administradores de bases de datos debe utilizar las siguientes pautas para

mantener las contraseñas seguras. Un usuario que tiene acceso para modificar el directorio de plugins o

el my.cnf archivo que especifica la ubicación del directorio de plugins plugins

Page 3: Resumen Seguridad en MySQL

pueden reemplazar y modificar las capacidades proporcionadas por los plugins, incluyendo plugins de autenticación.

Contraseñas y el registro de

Las contraseñas pueden aparecer como texto sin formato en las sentencias de SQL tales como CREATE USER ,GRANT , y SET PASSWORD , o declaraciones que invocan el PASSWORD () función. Si estas declaraciones son registrados por el servidor MySQL, las contraseñas están disponibles para cualquier persona con acceso a los registros.

 Para protegerse contra la exposición indebida a los archivos de registro, que debe estar ubicado en un directorio que restringe el acceso a sólo el servidor y el administrador de base de datos. Si inicia la sesión a las tablas en el mysql base de datos, el acceso a las tablas no deben otorgarse a todas las cuentas no administrativas.

Hashing de contraseñas en MySQL

Cada cuenta MySQL se puede asignar una contraseña, aunque el usuario mesa no

almacena la versión de texto plano de la contraseña, sino un valor hash calculado a

partir de la misma.

Cuando un cliente intenta conectarse al servidor, existe un paso inicial de

autenticación en el que el cliente debe presentar una contraseña que tiene un

valor hash coincida con el valor hash almacenado en el usuario tabla para la

cuenta de que el cliente desea utilizar.

El servidor comprueba los valores hash durante la autenticación cuando un cliente

intenta conectarse primero. El servidor genera valores hash si un cliente conectado

invoca la PASSWORD () o la función utiliza una sentencia de generación de contraseña

para establecer o cambiar una contraseña.

El original (pre-4.1) Método Hashing

El método de hashing original producido una cadena de 16 bytes. Tales hashes tener

este aspecto:

Page 4: Resumen Seguridad en MySQL

mysql> SELECT CONTRASEÑA ('MYPASS');+ -------------------- +CONTRASEÑA ('MYPASS') | |+ -------------------- +| 6f8c114b58f2ce9e |+ -------------------- +

Para almacenar las contraseñas de cuentas, la contraseña columna del usuario tabla

Fue en este punto 16 bytes de longitud.

El 4,1 Método Hashing

MySQL 4.1 introduce hash de la clave que proporciona una mayor seguridad y reduce

el riesgo de intercepción de contraseñas.

En MySQL 4.1.1, el método de dispersión fue modificada para producir un valor

largo de 41-byte Hash:mysql> SELECT CONTRASEÑA ('MYPASS');+ ------------------------------------------- +CONTRASEÑA ('MYPASS') | |+ ------------------------------------------- +| * 6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |+ ------------------------------------------- +

El formato de la contraseña hash más largo tiene mejores propiedades criptográficas,

y autenticación de cliente basada en hashes largos es más segura que la basada en

los antiguos hashes cortos.

Problemas de compatibilidad relacionadas con los métodos hashing

La ampliación de la contraseña columna en MySQL 4.1 de 16 bytes a 41 bytes afecta a

las operaciones de instalación o actualización del siguiente modo:

Si realiza una nueva instalación de MySQL, la contraseña columna se amplía a

41 bytes automáticamente. Para actualizaciones desde una versión anterior a 4.1 a 4.1 o posterior, debe

actualizar las tablas del sistema después de la actualización.

Un cliente 4.1 o posterior se puede conectar a un servidor pre-4.1, ya que el cliente

comprenda tanto el pre-4.1 y 4.1 métodos de hashing de contraseñas. Sin embargo, un

cliente pre-4.1 que intenta conectarse a un servidor 4.1 o posterior puede tener

dificultades. Las diferencias entre los hashes de contraseñas cortos y largos son

Page 5: Resumen Seguridad en MySQL

relevantes para la forma en que el servidor utiliza contraseñas durante la autenticación

y por cómo genera los hashes de contraseñas para clientes conectados que llevan a

cabo las operaciones de cambio de contraseña.

Si la columna es corta, sólo a corto-hash se utiliza la autenticación. Si la columna es larga, puede soportar hashes cortos o largos, y el servidor

puede usar cualquier formato.

Implicación del cambio en el hashing de contraseñas en MySQL 4.1 para Programas de

Aplicación

Una actualización a MySQL versión 4.1 o posterior pueden causar problemas de

compatibilidad para aplicaciones que usan PASSWORD () para generar contraseñas

para sus propios fines. Las aplicaciones no deben hacerlo, porque PASSWORD () se

debe utilizar sólo para gestionar las contraseñas para las cuentas MySQL, algunas

aplicaciones usan PASSWORD () para sus propios propósitos de todos modos.

El curso de acción recomendado en estos casos es modificar la aplicación para usar

otra función, comoSHA2 () , SHA1 () , o MD5 () , para producir valores hash. 

Hacer que MySQL sea seguro contra ataques

Cuando se conecta a un servidor MySQL, debería utilizar una contraseña. La

contraseña no se transmite en texto claro a través de la conexión. Contraseña

manipulación durante la conexión de un cliente se actualizó en MySQL 4.1.1 para ser

muy seguro. Si usted todavía está utilizando pre-4.1.1-claves del tipo, el algoritmo de

cifrado no es tan fuerte como el nuevo algoritmo. Si la conexión entre el cliente y el

servidor pasa a través de una red insegura, y usted está preocupado acerca de esto,

se puede utilizar el protocolo comprimido para hacer que el tráfico mucho más difícil de

descifrar. También puede utilizar el soporte SSL interna de MySQL para hacer la

conexión aún más segura. También puede utilizar SSH para conseguir una conexión

cifrada TCP / IP entre un servidor MySQL y el cliente MySQL. 

Exigir a todas las cuentas MySQL para tener una contraseña. 

Nunca ejecute el servidor MySQL como el Unix raíz del usuario. Esto es

extremadamente peligroso, ya que cualquier usuario con el ARCHIVO privilegio

es capaz de hacer que el servidor de crar ficheros como root . Para prevenir

Page 6: Resumen Seguridad en MySQL

esto, mysqld rechaza ejecutarse como root a menos que se utilice

explícitamente el - user = root opción. . Puede crear una cuenta separada Unix

llamado mysql para hacelo todo aún más seguro. Utilice esta cuenta tan solo

para administrar MySQL. 

Asegúrese de que la única cuenta de usuario Unix con permisos de lectura o

escritura en los directorios de bases de datos es la cuenta que se utiliza para

ejecutar mysqld .

No conceda el PROCESO o super privilegio a los usuarios no

administrativos. La salida de mysqladmin processlist y PROCESSLIST

MOSTRAR muestra el texto de cualquier sentencia que se está ejecutando, por

lo que cualquier usuario que tiene permiso para ver la lista de procesos del

servidor

Si usted no confía en sus DNS, podría utilizar direcciones IP en lugar de

nombres de host en las tablas de permisos. En cualquier caso, usted debe ser

muy cuidadoso en crear registros en tablas de permiso utilizando nombres de

host que contienen caracteres comodín.

Relacionados con la seguridad de mysqld Opciones y variables

La siguiente tabla muestra mysqld opciones y variables del sistema que afectan a la

seguridad. 

NombreCmd-Line

Opción de archivo

Sistema Var

Estado Var

Alcance Var Dinámica

allow-suspicious-udfs Sí Sí        

automatic_sp_privileges     Sí   Global Sí

chroot Sí Sí        

des-key-file Sí Sí        

local_infile     Sí   Global Sí

old_passwords     Sí   Ambos Sí

Page 7: Resumen Seguridad en MySQL

NombreCmd-Line

Opción de archivo

Sistema Var

Estado Var

Alcance Var Dinámica

safe-show-database Sí Sí Sí   Global Sí

safe-user-create Sí Sí        

secure-auth Sí Sí     Global Sí

- Variable : secure_auth     Sí   Global Sí

asegurar-file-priv Sí Sí     Global No

- Variable : secure_file_priv     Sí   Global No

skip-grant-tables Sí Sí        

skip-name-resolve Sí Sí     Global No

- Variable : skip_name_resolve     Sí   Global No

skip-networking Sí Sí     Global No

- Variable : skip_networking     Sí   Global No

skip-show-database Sí Sí     Global No

- Variable : skip_show_database     Sí   Global No

Cómo ejecutar MySQL como usuario normal

En Windows, puede ejecutar el servidor como un servicio de Windows utilizando una

cuenta de usuario normal.

En Unix, el servidor MySQL mysqld puede iniciarse y ejecutarse por otros usuarios. Sin

embargo, debe evitar ejecutar el servidor como el Unix root usuario por motivos de

seguridad. Para cambiar mysqld para ejecutarse como un usuario normal, sin privilegios

Unix nombre_usuario , debe hacer lo siguiente:

Page 8: Resumen Seguridad en MySQL

1. Detenga el servidor si se está ejecutando (utilice el comando mysqladmin

shutdown )2. Cambie los directorios de bases de datos y archivos para nombre_usuario tiene

privilegios para leer y escribir archivos en ellos

3. shell> chown-R nombre_usuario / ruta / hacia / mysql / datadir

Si no lo hace, el servidor no será capaz de acceder a bases de datos o tablas

cuando se ejecuta comonombre_usuario .

4. Inicie el servidor como usuario nombre_usuario .5. Para iniciar el servidor como el usuario dado de forma automática al inicio del

sistema, especifique el nombre de usuario mediante la adición de un usuario a la opción [mysqld] del grupo de / etc / my.cnf o el archivo de opciones my.cnf.

Cuestiones relacionadas con la seguridad y LOAD DATA LOCAL

El LOAD DATA declaración puede cargar un archivo que se encuentra en el equipo

servidor, o puede cargar un archivo que se encuentra en el equipo cliente cuando

el LOCAL palabra clave se especifica.

La transferencia del archivo desde el equipo cliente al equipo servidor se inicia el

servidor MySQL. Este servidor puede acceder a cualquier archivo en el equipo

cliente para que el usuario cliente tiene acceso de lectura. En un entorno Web donde los clientes se conectan desde un servidor Web, un

usuario podría usar LOAD DATA LOCAL para leer cualquier fichero al que el servidor Web tuviese acceso de lectura.

Por defecto, todos los clientes MySQL y bibliotecas en distribuciones binarias se compilan con elDENABLED_LOCAL_INFILE-= 1.

Puede desactivar todas las LOAD DATA LOCAL declaraciones desde el lado del servidor arrancando mysqldcon la opción - local-infile = 0.

Client Security Directrices para la programación

Aplicaciones que el acceso de MySQL no debe confiar en ningún dato enviado por los usuarios, que pueden tratar de engañar a su código introduciendo secuencias de caracteres especiales o en formularios webs, URLs, o cualquier aplicación que haya desarrollado. 

Page 9: Resumen Seguridad en MySQL

Un error común es proteger únicamente valores de datos de cadena. Recuerde comprobar los datos numéricos también. Si una aplicación genera una consulta como SELECT * FROM tabla WHERE ID = 234 cuando un usuario introduce el valor 234 , el usuario puede introducir el valor 234 OR 1 = 1 para provocar que la aplicación genere la consulta SELECT * FROM tabla WHERE id = 234 OR 1 = 1 . Como resultado de ello, el servidor recupera cada fila de la tabla. Esto expone a cada fila y hace que la carga del servidor excesivo.

A veces la gente piensa que si una base de datos contiene sólo los datos a disposición del público, no tiene que ser protegida. Esto es incorrecto. Incluso si es permisible para mostrar cualquier fila en la base de datos, que se debería proteger contra ataques de denegación de servicio.

Activar el modo SQL estricto para indicar al servidor para ser más restrictiva de lo que los valores de datos que acepta

Intente introducir comillas simples y dobles ( " " " y " " " ) en todos sus

formularios web. Si tienes cualquier tipo de error MySQL, investigue el problema

de inmediato.

Intente modificar las URLs dinámicas añadiendo un 22% ( " " " ), el 23% ( " # " ),

y el 27% ( " " " ) para ellos. Intente introducir letras, espacios y símbolos especiales en vez de números en

los campos numéricos. 

Compruebe el tamaño de los datos antes de pasarlos a MySQL.

Muchas interfaces de programación de aplicaciones proporcionan un medio de escapar

caracteres especiales en los valores de los datos. Utilizado correctamente, esto evita

que los usuarios de las aplicaciones introduzcan valores que provoquen que la

aplicación genere sentencias con efectos diferentes a los que usted pretendía.

3.-   Unix posterior a procedimientos

En Unix, las tablas de permisos se configuran por el mysql_install_db programa. Para

algunos métodos de instalación, este programa se ejecuta de forma automática si una

base de datos existente no puede ser encontrado.

Si se instala MySQL en Linux a través de una distribución RPM, el servidor RPM

ejecuta mysql_install_db .

Page 10: Resumen Seguridad en MySQL

Usando el sistema de paquetes nativos en muchas plataformas, incluyendo

Linux Debian, Linux Ubuntu, Gentoo Linux y otros, el mysql_install_db comando

se ejecuta para usted.

Si se instala MySQL en Mac OS X utilizando una distribución PKG, el instalador

ejecuta mysql_install_db .

Después de completar el procedimiento y tener el servidor en funcionamiento, se

deberían asignar contraseñas a las cuentas creadas por mysql_install_db y tal vez

restringir el acceso a bases de datos de prueba. 

BASEDIR es el directorio de instalación de la instancia de MySQL. Es probable que

sea algo como / usr / local / mysql o / usr / local . Los pasos siguientes se supone que

ha cambiado la ubicación de este directorio.

Se pueden encontrar varios ficheros y subdirectorios del BASEDIR directorio. Lo más

importante para propósitos de instalación son el bin y scripts de subdirectorios:

El bin directorio contiene los programas cliente y el servidor. Usted debe agregar

el nombre de la ruta completa de este directorio a su TRAYECTORIA 

Los scripts de directorio contiene el mysql_install_db script utilizado para

inicializar el mysql base de datos que contiene las tablas que almacenan los

permisos de acceso al servidor.

Ejecute mysql_install_db programa para configurar las tablas de permisos MySQL

iniciales, que contienen los privilegios que determinan qué usuarios están autorizados a

conectarse al servidor.

Por lo general, mysql_install_db se debe ejecutar sólo la primera vez que instala

MySQL, así que usted puede saltar este paso si está actualizando una instalación

existente, sin embargo, mysql_install_db no sobreescribe ninguna tabla existentes, por

lo que debe ser seguro para utilizarlo en cualquier circunstancia.

El mysql_install_db script crea directorio de datos del servidor con mysql como

propietario. En el directorio de datos, se crea directorios para el mysql base de datos

que contiene las tablas de permisos y la prueba dela base de datos que puede utilizar

para probar MySQL.

El mysql_install_db script crea directorio de datos del servidor con mysql como

propietario. En el directorio de datos, se crea directorios para el mysql base de datos

que contiene las tablas de permisos y la prueba dela base de datos que puede utilizar

para probar MySQL.

Page 11: Resumen Seguridad en MySQL

Problemas en la ejecución de mysql_install_db

El propósito de la mysql_install_db guión es generar nuevas tablas de privilegios

MySQL. No sobrescribe tablas de privilegios MySQL existentes, y no afecta a ningún

otro dato.

Si desea volver a crear las tablas de privilegios, primero detenga el mysqld servidor si

se está ejecutando. A continuación, cambie el nombre mysql directorio bajo el directorio

de datos para guardarlo, y luego ejecutarmysql_install_db . 

Cuando se ejecuta mysql_install_db , pueden producirse los siguientes problemas:

mysql_install_db falla al instalar las tablas de permisos.Usted puede encontrar

que mysql_install_db falla al instalar las tablas de permisos y termina después

de mostrar los siguientes mensajes:A partir demonio mysqld con bases de datos de XXXXXXmysqld terminó

Hay una mysqld proceso en ejecución, esto indica que el servidor está en

ejecución, en cuyo caso las tablas de permisos probablemente ha sido creado

ya.

Instalación de un segundo mysqld servidor no funciona cuando un servidor está

en ejecución, esto puede suceder cuando se tiene una instalación existente de

MySQL, pero quiero poner una nueva instalación en una ubicación diferente. 

 Usted no tiene acceso de escritura al directorio / tmp directorio, Si usted no

tiene acceso de escritura para crear ficheros temporales o un fichero de socket

Unix en la ubicación por defecto (el directorio / tmp del directorio) o

el tmp_dir variable de entorno.

Hay algunas alternativas para ejecutar el mysql_install_db secuencia de comandos

proporcionada en la distribución de MySQL:

Si desea que los privilegios iniciales sean diferentes de los predeterminados

estándar, puede modificarmysql_install_db antes de ejecutarlo. Sin embargo, es

preferible utilizar GRANT y REVOKE para modificar los privilegios después

de las tablas de permisos se han establecido. Si desea instalar MySQL en varias

máquinas con los mismos privilegios, usted puede poner

el GRANT y REVOKEdeclaraciones en un archivo y ejecutar el archivo como un

script utilizando mysql después de ejecutarmysql_install_db .

Es posible volver a crear las tablas de permisos completamente después de que

hayan sido previamente creados. Es posible que desee hacer esto si usted

Page 12: Resumen Seguridad en MySQL

apenas está aprendiendo a usar GRANT y REVOKE y se han hecho tantas

modificaciones después de ejecutar mysql_install_db que se desea limpiar las

mesas y empezar de nuevo.

Puede iniciar mysqld manualmente utilizando la opción - skip-grant-tables opción

y agregar la información de privilegio por sí mismo utilizando mysql :shell> bin / mysqld_safe - user = mysql - skip-grant-tables y shell> bin / mysql mysql

Arrancar y parar MySQL automáticamente

Invocar mysqld directamente. Esto funciona en cualquier plataforma. Ejecutar el servidor MySQL como un servicio de Windows. El servicio se puede

configurar para iniciar el servidor automáticamente cuando se inicia Windows, o como un servicio manual que se inicia a petición.

Invoque mysqld_safe , el cual intenta determinar las opciones apropiadas para mysqld y entonces lo ejecuta con dichas opciones. Este script se usa en sistemas Unix y Unix-like.

Invocar mysql.server . Este script se usa principalmente al iniciar y cerrar el sistema en sistemas que utilizan System V directorios de ejecución estilo (es decir, / etc / init.d .

En Mac OS X, instale un paquete separado llamado MySQL Startup Item para habilitar el inicio automático de MySQL en el inicio del sistema. El Componente de Inicio inicia el servidor invocando mysql.server . 

Utilice el sistema Solaris / OpenSolaris marco de gestión de servicios (SMF) para iniciar y controlar el arranque de MySQL. 

Los mysqld_safe y mysql.server scripts, Windows Server, Solaris / OpenSolaris SMF, y el Mac OS X de inicio del artículo (o panel de MySQL preferencia) se puede utilizar para iniciar el servidor manualmente, o automáticamente al iniciar el sistema. 

Para iniciar y detener MySQL automáticamente en el servidor, es necesario agregar

comandos de arranque y parada en los lugares apropiados en su / etc / rc * archivos.

Si utiliza el servidor Linux paquete RPM ( MySQL-server- VERSION . rpm ), o un

paquete de instalación nativo Linux, el mysql.server script puede ser instalado en el /

etc / init.d directorio con el nombre mysql . Si se instala MySQL de una distribución

fuente o usando un formato binario de distribución que no

instalamysql.server automáticamente, puede instalarlo manualmente. La escritura se

puede encontrar en elsupport-files bajo el directorio de instalación de MySQL o en el

árbol de código fuente MySQL.

Page 13: Resumen Seguridad en MySQL

Para instalar mysql.server manualmente, copiarlo en el archivo / etc / init.d directorio con el nombremysql , y luego hacerlo ejecutable. 

En FreeBSD, los scripts de inicio generalmente se encuentran en / usr / local / etc / rc.d / . Los rc (8) establece manuales de página que los scripts de este directorio se ejecutan solamente si su nombre base concuerda con el *. SH archivo de shell patrón de nombre. Los demás archivos o directorios presentes en el directorio es ignorado sin advertencias.

Tabla 3.1. MySQL Scripts de inicio y apoyados por grupos de opciones de servidor

Guión Grupos de opciones

mysqld[Mysqld] , [server] , [mysqld- major_version ]

mysqld_safe [Mysqld] , [server] , [mysqld_safe]

mysql.server [Mysqld] , [mysql.server] , [servidor]

Arrancar y resolver problemas del servidor MySQL

Si tiene problemas al iniciar el servidor, aquí hay algunas cosas que puede intentar:

Compruebe el registro de errores para ver por qué el servidor no se inicia.

Especificar cualquier opción especial necesaria para el motor de

almacenamiento en uso.

Asegúrese de que el servidor sabe donde encontrar el directorio de datos. Asegúrese de que el servidor puede acceder al directorio de datos. 

Algunos motores de almacenamiento tienen opciones que controlan su comportamiento. Se puede crear unmy.cnf archivo y especificar las opciones de inicio para el motor que va a utilizar. Si usted va a usar motores de almacenamiento que soportan tablas transaccionales ( InnoDB , NDB ).

Motores de almacenamiento usará los valores predeterminados de opción si se

especifica ninguno, pero se recomienda que revise las opciones disponibles y

especificar valores explícitos para aquellos para los que los valores por defecto no son

adecuados para su instalación.

Page 14: Resumen Seguridad en MySQL

Cuando el mysqld servidor se inicia, se posiciona en el directorio de datos. Aquí es

donde espera encontrar bases de datos y donde se espera que para escribir archivos

de registro. El servidor también escribe el PID (ID del proceso) en el directorio de datos.La ubicación del directorio de datos se fija cuando se compila el servidor. Si usted recibe Errcode 13 (que significa Permission denied ) al iniciar mysqld , significa que los privilegios del directorio de datos oa su contenido no permiten el acceso al servidor. En este caso, cambie los permisos de los archivos y directorios involucrados para que el servidor tiene derecho a usarlos. 

Seguras las cuentas iniciales de MySQL

Parte del proceso de instalación de MySQL es configurar el mysql base de datos que

contiene las tablas de permisos:

Distribuciones de Windows contiene tablas de permisos inicializadas. En Unix, el mysql_install_db programa rellena las tablas de permisos. Algunos

métodos de instalación ejecuta este programa para usted. 

El mysql.user tabla de permisos define las cuentas iniciales de MySQL de usuario y sus

privilegios de acceso:

Algunas cuentas tienen el nombre de usuario root . Son cuentas de superusuario

que tienen todos los privilegios y puede hacer cualquier cosa. Las

primeras raíces contraseñas de cuentas están vacías, por lo que cualquier

persona puede conectarse al servidor MySQL.

En Windows, la raíz se crean cuentas que las conexiones de permisos desde el

host local. Las conexiones pueden hacerse especificando el nombre de

host localhost , la dirección IP 127.0.0.1 , o la dirección IPv6 :: 1 . 

En Unix, cada raíz cuenta permite conexiones desde el host local. Las

conexiones pueden hacerse especificando el nombre de host localhost , la

dirección IP 127.0.0.1 , la dirección IPv6 :: 1 ,

Algunas cuentas son para los usuarios anónimos. Estos tienen un nombre de

usuario vacío. Las cuentas anónimas no tienen contraseña, así que cualquiera

puede usarlos para conectarse al servidor MySQL.

En Windows, hay una cuenta anónima, que permite conexiones desde el host

local. Las conexiones pueden realizarse mediante la especificación de un

nombre de host localhost .

En Unix, cada una cuenta anónima permite conexiones desde el host local. Las

conexiones pueden realizarse mediante la especificación de un nombre de

Page 15: Resumen Seguridad en MySQL

host localhost para una de las cuentas, o el nombre de host o la dirección IP

real para el otro.

4.- El sistema de privilegios de acceso de MySQL La función primaria del sistema de privilegios de MySQL, es autenticar un usuario que

se conecta desde un equipo dado, y asociar dicho usuario con privilegios en una base

de datos tales como SELECT , INSERT ,ACTUALIZAR y ELIMINAR .

Hay algunas cosas que no se pueden hacer con el sistema de privilegios de MySQL:

No se puede especificar a un usuario determinado se le debe negar el acceso.

No se puede especificar a un usuario que tiene privilegios para crear o eliminar

tablas en una base de datos pero no para crear o eliminar la propia base de datos.

Una contraseña se aplica globalmente a una cuenta.

El sistema de privilegios de MySQL asegura que todos los usuarios pueden realizar

sólo las operaciones permitidas a los mismos

Privilegios provisionados por Mysql

MySQL proporciona privilegios que se aplican en diferentes contextos y con diferentes

niveles de operación:

Privilegios administrativos que permiten a los usuarios gestionar el funcionamiento

del servidor MySQL. Estos privilegios son globales, ya que no son específicos de una

base de datos en particular.

Los privilegios para los objetos de base de datos tales como tablas, índices, vistas y

procedimientos almacenados se pueden conceder para objetos específicos dentro de

una base de datos de todos los objetos de un tipo determinado dentro de una base

de datos.

Tabla 4.1. Privilegios admisibles para GRANT y REVOKE

Privilegio Columna Contexto

CREAR Create_privbases de datos, tablas, índices o

DROP Drop_priv bases de datos, tablas, vistas o

GRANT OPTION Grant_privbases de datos, tablas o procedimientos almacenados

LOCK TABLES Lock_tables_priv bases de datos

REFERENCIAS References_priv bases de datos o tablas

Page 16: Resumen Seguridad en MySQL

Privilegio Columna Contexto

EVENTO Event_priv bases de datos

ALTER Alter_priv tablas

DELETE Delete_priv tablas

ÍNDICE Index_priv tablas

INSERT Insert_priv tablas o columnas

SELECT SELECT_priv tablas o columnas

ACTUALIZACIÓN Update_priv tablas o columnas

CREATE TEMPORARY TABLES Create_tmp_table_priv tablas

GATILLO Trigger_priv tablas

CREATE VIEW Create_view_priv visitas

Mostrar vista Show_view_priv visitas

ALTER RUTINA Alter_routine_priv procedimientos almacenados

CREATE ROUTINE Create_routine_priv procedimientos almacenados

EXECUTE Execute_priv procedimientos almacenados

ARCHIVO File_privpresentar acceso en el host servidor

CREATE TABLESPACE Create_tablespace_priv servidor de administración

CREAR USUARIO Create_user_priv servidor de administración

PROCESO Process_priv servidor de administración

PROXY ver proxies_priv mesa servidor de administración

RELOAD Reload_priv servidor de administración

RÉPLICA DEL CLIENTE Repl_client_priv servidor de administración

Esclavo de replicación Repl_slave_priv servidor de administración

MOSTRAR LAS BASES DE DATOS Show_db_priv servidor de administración

PARO Shutdown_priv servidor de administración

ESTUPENDO Super_priv servidor de administración

TODOS LOS PRIVILEGIOS []   servidor de administración

USO   servidor de administración

Especificando nombres de cuenta

Consiste en un nombre de usuario y un nombre de host. Esto permite la creación de

cuentas de los usuarios con el mismo nombre y que pueda conectarse desde distintos

hosts. 

Page 17: Resumen Seguridad en MySQL

En las sentencias de SQL tales como CREATE USER , GRANT , y SET PASSWORD ,

se deben escribir los nombres de cuenta con las siguientes reglas:

La sintaxis de los nombres de cuenta es: ' nombre_usuario '@' nombre_sistpral " .

Un nombre de cuenta consiste sólo de un nombre de usuario que es equivalente

a ' nombre_usuario '@'% ' 

El nombre de usuario y nombre de host no tiene por qué ser citado si son legales

como identificadores no cotizadas. Las citas son necesarias para especificar

un nombre_usuario cadena que contiene caracteres especiales (por

ejemplo, " - " ), o un nombre_host cadena que contiene caracteres especiales o

caracteres comodín (por ejemplo, " % " ), por ejemplo, 'test-usuario' @ '% com. ' .

Citar los nombres de usuario y nombres de host como identificadores o cadenas, ya

sea utilizando comillas invertidas ( " ` " ), comillas simples ( " ' " ) o comillas dobles

( " " " ).

El nombre de usuario y partes de nombre de host, si es citado, deberán cotizar por

separado. Es decir, escribir 'yo' @ 'localhost' no 'me @ localhost', este último se

interpreta como "me @ localhost '@'% ' .

Control de acceso, Nivel 1: Comprobación de conexión

Cuando intenta conectarse a un servidor MySQL, el servidor acepta o rechaza la

conexión basada en su identidad y si se puede verificar su identidad proporcionando la

contraseña correcta. Si no, el servidor deniega el acceso completamente. 

La comprobación de la identidad se realiza usando los tres usuarios columnas de

alcance de la tabla ( host ,usuario y contraseña ). El servido solo acepta la conexión si

el Host y User coincide con el nombre de host del cliente y el nombre del usuario y el

cliente proporciona la clave especificada en la fila.

Si el valor de la columna usuario esta en blanco, el nombre de usuario de una conexión

entrante debe coincidir exactamente. Si el valor de usuario esta en blanco se debe

ajustar con el nombre del usuario. Si la fila usuario coincide con una conexión de

entrada con el nombre en blanco, el usuario debe considerarse como anónimo.

La columna contraseña puede estar en blanco, pero no significa que pueda usarse

cualquier clave, sino que el usuario puede conectarse sin especificar una contraseña.

Contraseñas con valores en blanco en la tabla usuario representan contraseñas

encriptados.

Control de acceso, nivel 2: Comprobación de solicitudes

Page 18: Resumen Seguridad en MySQL

Después de establecer una conexión, el servidor entra en la etapa 2 del control de

acceso. Para cada solicitud que se emite a través de esa conexión, el servidor

determina qué operación desea llevar a cabo, a continuación, comprueba si tienes

suficientes privilegios para hacerlo.

Cuando los privilegios cambian toman efectos.

Si modifica las tablas de permisos indirectamente usando administración de cuentas

declaraciones como GRANT ,REVOKE , SET PASSWORD o RENAME USER , el

servidor notifica estos cambios y los cargas en las tablas grant en la memoria

inmediatamente.

Si modifica las tablas grant directamente utilizando frases como INSERT , UPDATE ,

o DELETE , los cambios no tendrán efecto sobre la comprobación de privilegios hasta

que se reinicie el servidor o decirle que se vuelva a cargar las tablas. 

Para decirle al servidor que recargue las tablas de permisos, ejecutar una operación

flush-privileges. Esto se puede hacer mediante la declaración de un flush-privileges o

mediante la ejecución del comando mysqladmin flush-privileges o mysqladmin

reload.

Una recarga tabla de permisos afecta privilegios para cada conexión de cliente

existente de la siguiente manera:

Cambios de tabla y columna de privilegio en vigor con la siguiente petición del

cliente.

Base de datos cambia los permisos tengan efecto la próxima vez que el cliente

realiza una USEdb_name comunicado.

Privilegios globales y las contraseñas no se ven afectados por un cliente

conectado. Estos cambios entrarán en vigor sólo para conexiones posteriores.

5.- Gestión de la Cuenta de Usuario MySQL

Se describen la configuración que deben de tener las cuentas para clientes dentro de un servidor MySQL.

5.1.- Nombres de Usuario y Contraseñas

MySQL almacena los usuarios dentro de la tabla users de a base de datos principal de MySQL. Los privilegios que puede tener una cuenta, se define en términos de un nombre de usuario y el equipo o equipos disponibles para la conexión al servidor. Podemos encontrar algunas diferencias entre los nombres de usuario y las contraseñas:

Page 19: Resumen Seguridad en MySQL

Los nombre de usuario, tienen el propósito de ser verificados por autenticación. El valor predeterminado puede cambiarse fácilmente. Usando una sentencia u- o – user.

Pueden tener hasta 16 caracteres.El servidor de MySQL utiliza las contraseñas almacenadas para autenticar al cliente que intenta accesar al servidor.

MySQL encripta las contraseñas que se almacenan en el servidor utilizando un algoritmo propio.

Al realizar la instalación de MySQL, las tablas que incluyen los permisos se rellenan con un conjunto inicial de cuentas. Así mismos, se puedenestablecer, modificar y eliminar cuentas usando las sentencias CREATE USER, GRANT, REVOKE.

Cuando se desea conectar a un servidor de MySQL, se utiliza la siguiente sentencia:

Shell> mysql –user=monty –password=”contraseña” db_name;

O en forma corta:

Shell>mysql –u monty –p “contraseña” db_name;

5.2 Crear Cuentas de Usuario

Para realizar la creación de cuentas de usuario, existen dos formas:

Mediante el uso de la declaración CREATE USER o GRANT. Estas permiten las modificaciones pertinentes a una tabla en cuanto a permisos se refieren.

Mediante la manipulación de la tabla de permisos utilizando sentencias como INSERT, DELETE.

Una tercera opción, podría ser el uso de MySQL Workbench u otros programas se uso similar.

Para poder realizar modificaciones a las cuentas de usuarios, primero se tiene que accesar al usuario root y éste a su vez debe de tener privilegios de INSERT y RELOAD, para poder realizarlas.

Los pasos para realizar las modificaciones son los siguientes:

1. Conectarse a MySQL, con la sentencia vista previamente.2. Utilizar cualquiera de las siguientes sentencias:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' -> WITH GRANT OPTION;

Page 20: Resumen Seguridad en MySQL

mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' -> WITH GRANT OPTION;mysql> CREATE USER 'admin'@'localhost';mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';mysql> CREATE USER 'dummy'@'localhost';

Las cuentas creadas tienen las siguientes propiedades:

Las cuentas que tienen por nombre de usuario monty, son de superusuario.

El 'localhost', 'admin' @ cuenta no tiene contraseña. Esta cuenta solo puede ser utilizada por el administrador para conectarse desde el host local. Tiene privilegios administrativos. 

Para crear cuentas de usuario usando la opción INSERT:

shell> mysql - user = root mysql mysql> INSERT INTO EN EN Host usuario SET = 'localhost', usuario = 'admin', -> Reload_priv = 'Y', Process_priv = 'Y'; mysql> INSERT INTO usuarios (Host, User, Password) -> VALUES ('localhost', ' dummy ',''); mysql> FLUSH PRIVILEGES;

Al crear las cuentas con INSERT, es necesario el uso de FLUSH PRIVILEGES para decirle al servidor que recargue las tablas de permisos.

5.3 Eliminar Cuentas de Usuario

Para eliminar cuentas de usuario, se usa el comando DROP USER. Elimina los registros y todos sus permisos, para utilizarlo se necesita tener el permiso global CREATE USER o el DELETE.

5.4 Ajuste de los límites de una Cuenta

Para limitar el número de conexiones simultáneas que se pueden hacer, se puede configurar los recursos al servidor por medio del comando max_user_connections, además de que el uso de este comando no permite la gestión de las cuentas individuales.

En MySQL, se pueden limitar el uso de los siguientes recursos para las cuentas individuales:

El número de consultas que una cuenta puede permitir por hora. El número de actualizaciones que una cuenta puede emitir por hora.

Page 21: Resumen Seguridad en MySQL

El número de veces que una cuenta puede conectarse con el servidor por hora.

El número de conexiones simultáneas al servidor por cuenta.

Para establecer los límites de recursos de una cuenta, se usa el comando GRANT con un WITH que nombra cada recurso a ser limitado. Ejemplo:

mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank';mysql> GRANT ALL ON customer.* TO 'francis'@'localhost' -> WITH MAX_QUERIES_PER_HOUR 20 -> MAX_UPDATES_PER_HOUR 10 -> MAX_CONNECTIONS_PER_HOUR 5 -> MAX_USER_CONNECTIONS 2;

Para modificar los límiteseistentes para una cuenta, se usa GRANT USAGE. Ejemplo:

mysql> GRANT USAGE ON *.* TO 'francis'@'localhost' -> WITH MAX_CONNECTIONS_PER_HOUR 0;

5.5 Asignar Contraseñas a las Cuentas

Para asignar una contraseña al crear una nueva cuenta con CREATE USER, se incluye un IDENTIFIED BY. Ejemplo:

mysql> CREATE USER 'jeffrey'@'localhost' -> IDENTIFIED BY 'mypass';

Para asignar o cambiar la contraseña para una cuenta existente usar un SET PASSWORD:

mysql> SET PASSWORD FOR -> 'jeffrey'@'localhost' = PASSWORD('mypass');

Para asignar una contraseña desde la línea de comandos, utilizar MYSQLADMIN:

shell> mysqladmin-u nombre_usuario -h nombre_host password " newpwd "