resumen seguridad en mysql
TRANSCRIPT
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).
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
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:
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
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
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í
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:
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.
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 .
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.
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
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.
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.
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
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
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.
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
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:
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;
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.
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 "