Este documento describe la gestión de cuentas de usuario y acceso en MySQL. Explica que cada cuenta consta de un nombre de usuario y contraseña, y que es mejor crear cuentas separadas para cada usuario en lugar de compartir credenciales. También cubre cómo crear y eliminar cuentas, asignar contraseñas, y limitar los recursos y privilegios de cada cuenta.
2. 2
En MySQL, cada cuenta consta de un nombre de usuario y una contraseña. También
especifica el host o los hosts cliente donde el usuario puede conectarse a tu servidor
MySQL.
Normalmente crearás cuentas adicionales cuando más personas necesiten acceder a tu
base de datos. Aunque varias personas pueden interactuar con MySQL desde la misma
cuenta, compartir las credenciales de acceso es un riesgo para la seguridad.
Si detectas algún error o actividad sospechosa en tu base de datos, una cuenta compartida
también dificultará la identificación del culpable.
Una introducción a MySQL (y por qué puedes querer añadir nuevos usuarios)
3. 3
Restricciones de superusuario
1- En Cloud SQL, los clientes no pueden crear
usuarios con atributos de súper usuario ni acceder
a ellos. Debido a que Cloud SQL para MySQL es
un servicio administrado, restringe el acceso a
ciertas tablas y procedimientos del sistema. Los
privilegios del lenguaje de manipulación de datos
(DML) y el lenguaje de definición de datos (DDL)
se restringen en algunas tablas de esquema.
2- A continuación, se muestra la lista de las tablas
del sistema de MySQL 5.6 en el esquema MySQL
que requieren permisos de escritura:
audit_log_rules_expanded,
audit_log_supported_ops, audit_log_rules y
cloudsql_replica_index, db, event, func, heartbeat,
plugin, proc, user y tables_priv. Para MySQL 5.7,
esta es la lista: audit_log_rules_expanded,
audit_log_supported_ops, audit_log_rules,
cloudsql_replica_index, db, event, func,
gtid_executed, heartbeat, plugin, proc, user y
tables_priv.
4. Formato de las cuentas de usuario de MySQL
4
Las cuentas de usuario de MySQL tienen dos componentes: un
nombre de usuario y un nombre de host. El nombre de usuario
identifica al usuario y el nombre de host especifica desde qué
hosts se puede conectar un usuario. El nombre de usuario y el
nombre de host se combinan para crear una cuenta de usuario:
'<user_name>'@'<host_name>'Puedes especificar una dirección
IP o un rango de direcciones para el nombre de host, o usar el
símbolo de porcentaje (“%”) a fin de no restringir el nombre de
host.
Ten en cuenta que si conectas tu instancia mediante direcciones
IP, debes agregar tu dirección IP de cliente como una dirección
autorizada, incluso si el nombre de host no está restringido.
5. Usuario predeterminado de MySQL
5
Cuando se crean, las instancias de MySQL tienen una cuenta de usuario predeterminada: 'root'@'%'. Usa
esta cuenta para conectarte y administrar la instancia de base de datos por primera vez. El usuario
predeterminado tiene todos los privilegios de la base de datos, excepto SUPER y FILE. En Cloud SQL, no
puedes cambiar el nombre de 'root'@'%'.
El valor predeterminado para root'@'% no es una contraseña, y MySQL no requiere que uses
una contraseña para root'@'%. Sin embargo, debido a que root'@'% existe en la mayoría de las
instalaciones de MySQL, el usuario root'@'% es un objetivo común de los accesos no
autorizados. Cualquier persona o programa que obtenga acceso a la instancia, podrá acceder a
ella y a los datos y controlarlos de forma casi ilimitada.
Por este motivo, te recomendamos que configures tu usuario de
root'@'% con una contraseña segura o lo borres. Para obtener
ayuda con la configuración de tu cuenta de usuario predeterminada,
consulta Configura la cuenta de usuario predeterminada.
6. Otras cuentas de usuario de MySQL
6
También puedes crear otras cuentas de usuario de MySQL. Esto
es una buena idea porque te permite usar diferentes cuentas de
usuario de MySQL para diferentes propósitos.
Puedes crear una cuenta de usuario con un nombre de host
restringido o usar comandos de SQL para limitar los
privilegios en las cuentas de usuario.
Para obtener más información sobre los nombres de las cuentas
de usuario, consulta la documentación de MySQL Para crear un
nuevo usuario de MySQL, consulta Crea un usuario.
7. z
Gestión de la cuenta de usuario MySQL
El significado de los
nombres de cuenta y
contraseñas usados en
MySQL y cómo se
compara con los
nombres y contraseñas
usados por su sistema
operativo.
Cómo preparar una
nueva cuenta y borrar
una existente
Cómo cambiar
contraseñas
Guías para usar
contraseñas de forma
segura
Cómo usar conexiones
seguras mediante SSL
Esta sección describe
cómo preparar cuentas
para clientes en su
servidor MySQL. Se
discuten los siguientes
temas
8. z
Nombres de usuario y contraseñas de MySQL
Una cuenta MySQL se define en términos de un nombre de usuario y el equipo o
equipos desde los que el usuario puede conectar al servidor.
Hay varias diferencias entre cómo se usan los nombres
de usuario y contraseñas en MySQL y cómo los usa el
sistema operativo
Los nombres de usuario, tal como los
usa MySQL para autentificación, no
tienen nada que ver con los nombres
de usuario (nombres de logueo) tal y
como los usa Windows o Unix. En
Unix, la mayoría de clientes MySQL
por defecto tratan de loguear usando el
nombre de usuario Unix como el
nombre de usuario MySQL, pero eso
es sólo como conveniencia.
Nombre de usuarios en MySQL
pueden tener como máximo 16
caracteres de longitud. Este límite está
hard-codeado en los servidores y
clientes MySQL, y tratar de evitarlo
mediante la modificación de las tablas
en la base de datos mysql no funciona
9. z
Nombres de usuario y contraseñas de MySQL
Nombres de usuario en el sistema operativo están completamente desligados de
los nombres de usuario de MySQL y pueden tener longitud máxima diferente.
Las contraseñas MySQL no tienen nada que ver con las contraseñas para
loguear en el sistema operativo. No hay una conexión necesaria entre la
contraseña que usa para entrar en una máquina Windows o Unix y la contraseña
usada para acceder al servidor MySQL en esa máquina.
MySQL encripta contraseñas usando su propio algoritmo. Esta encriptación es
diferente de la usada durante el proceso de logueo de Unix. La encriptación de
contraseña es la misma que la implementada en la función PASSWORD() . La
encriptación de contraseñas Unix es la misma que la implementada por la función
SQL ENCRYPT() . Consulte la descripción de las funciones PASSWORD() y
ENCRYPT() en Sección 12.9.2, “Funciones de encriptación”.
10. z
Nombres de usuario y contraseñas de MySQL
Cuando conecta a un servidor MySQL con un cliente de
líneas de comando, puede especificar el nombre de usuario
y contraseña para la cuenta que desea usar:
11. z
Añadir nuevas cuentas de usuario a MySQL
Puede crear cuentas MySQL de dos
formas:
Usando comandos
GRANT
Manipulando las tablas
de permisos MySQL
directamente
12. z
Añadir nuevas cuentas de usuario a MySQL
Las cuentas creadas con estos comandos GRANT tienen
las siguientes propiedades:
Dos de las cuentas tienen
un nombre de usuario de
monty y una contraseña de
some_pass. Ambas
cuentas son cuentas de
superusuario con plenos
permisos para hacer
cualquier cosa. Una cuenta
('monty'@'localhost') puede
usarse sólo cuando se
conecte desde el equipo
local.
Una cuenta tiene un
nombre de usuario de
admin y no tiene
contraseña. Esta cuenta
puede usarse sólo desde el
equipo local. Tiene los
privilegios administrativos
RELOAD y PROCESS .
Una cuenta tiene un
nombre de usuario de
dummy sin contraseña.
Esta cuenta puede usarse
sólo desde el equipo local.
No tiene ningún privilegio.
El permiso USAGE en el
comando GRANT permite
crear una cuenta sin darle
ningún privilegio.
13. z
Añadir nuevas cuentas de usuario a MySQL
Para crear las cuentas con GRANT, use
los siguientes comandos
shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON bankaccount.*
-> TO 'custom'@'localhost'
-> IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON expenses.*
-> TO 'custom'@'whitehouse.gov'
-> IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON customer.*
-> TO 'custom'@'server.domain'
-> IDENTIFIED BY 'obscure';
14. z
Añadir nuevas cuentas de usuario a MySQL
Las tres cuentas pueden usarse de la siguiente manera:
• La primera cuenta puede acceder a la base de datos bankaccount,
pero sólo desde el equipo local.
• La segunda cuenta puede acceder la base de datos expenses,
pero sólo desde el equipo whitehouse.gov.
• La tercera cuenta puede acceder la base de datos customer, pero
sólo desde el equipo server.domain.
15. z
Eliminar cuentas de usuario de MySQL
Para eliminar una cuenta, use el comando
DROP USER
16. z
Limitar recursos de cuentas
Una forma de limitar los
recursos de los servidores
MySQL es asignar a la
variable de sistema
max_user_connections un
valor distinto de cero.
Sin embargo, este método
es estrictamente global, y
no está permitido para la
administración de cuentas
individuales.
17. z
Limitar recursos de cuentas
Además, limita sólo el número
de conexiones simultáneas
hechas usando una sóla
cuenta, y no lo que un cliente
puede hacer una vez
conectado.
Ambos tipos de control son
interesantes para muchos
administradores de MySQL,
particularmente aquéllos que
trabajan en ISPs.
18. z
Limitar recursos de cuentas
En MySQL 5.0, puede limitar los siguientes recursos de
servidor para cuentas individuales
El número de consultas que una cuenta puede realizar por
hora
El número de actualizaciones que una cuenta puede
hacer por hora
El número de veces que una cuenta puede conectar con el
servidor por hora
19. z
Limitar recursos de cuentas
Para cambiar el límite de recursos con un comando GRANT
use la cláusula WITH
mysql> GRANT ALL ON customer.* TO 'francis'@'localhost'
-> IDENTIFIED BY 'frank'
-> WITH MAX_QUERIES_PER_HOUR 20
-> MAX_UPDATES_PER_HOUR 10
-> MAX_CONNECTIONS_PER_HOUR 5
-> MAX_USER_CONNECTIONS 2;
20. z
Limitar recursos de cuentas
Para inicializar o cambiar los límites de una cuenta existente,
use un comando GRANT USAGE
mysql> GRANT USAGE ON *.* TO
'francis'@'localhost'
-> WITH
MAX_QUERIES_PER_HOUR 100;
21. z
Limitar recursos de cuentas
El contador actual por hora de uso de recursos puede
reiniciarse globalmente para todas las cuentas, o
individualmente para una cuenta dada:
• Para reiniciar los contadores actuales a cero para todas las cuentas,
ejecute el comando FLUSH USER_RESOURCES. Los contadores
también pueden reiniciarse recargando las tablas de permisos (por
ejemplo,k con un comando FLUSH PRIVILEGES o mysqladmin reload).
• Los contadores para una cuenta individual pueden ponerse a cero
cambiando cualquiera de sus límites. Para hacerlo, use GRANT
USAGE como se ha descrito anteriormente y especifique un valor
límtite igual al valor que tiene la cuenta en ese momento.
22. z
Asignar contraseñas a cuentas
Se pueden asignar contraseñas desde la línea de comandos
usando el comando mysqladmin
shell> mysqladmin -u
nombres_usuario
-h
equipo
password "
nuevacontr
"
23. z
Asignar contraseñas a cuentas
Aunque generalmente es peferible asignar contraseñas usando
uno de los métodos precedentes, puede hacerlo modificando la
tabla user directamente
Para establecer una contraseña al crear
una nueva cuenta, especifique un valor
para la columna Password:
Para cambiar la contraseña en una cuenta
existente, use UPDATE para especificar el
valor de la columna Password
shell> mysql -u root mysql
mysql> INSERT INTO user
(Host,User,Password)
->
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES;
shell> mysql -u root mysql
mysql> UPDATE user SET Password =
PASSWORD('bagel')
-> WHERE Host = '%' AND User =
'francis';
mysql> FLUSH PRIVILEGES;