GNU/Linux >> Tutoriales Linux >  >> Linux

Guía para principiantes de gestión de usuarios de MySQL

Administrar usuarios en MySQL le brinda la capacidad de controlar lo que los usuarios pueden y no pueden hacer.

  • Cree cuentas de usuario con diferentes privilegios que sean apropiados para su función.
  • Evite usar la cuenta raíz:restrinja las aplicaciones comprometidas y proteja contra errores durante el mantenimiento de rutina.
  • Asegure la integridad de los datos mediante la asignación adecuada de privilegios de usuario individuales. Permitir que los usuarios autorizados hagan su trabajo. Evite que los usuarios no autorizados accedan a datos más allá de sus privilegios.

Verificación de cuenta de usuario

Cuando te conectas a un servidor MySQL y ejecutas una consulta, te autentica y autoriza tu actividad.

  • Autenticación :Verifica la identidad del usuario. Esta es la primera etapa del control de acceso. Debe autenticarse con éxito cada vez que se conecte. Si no puede autenticarse, su conexión falla y su cliente se desconecta.
  • Autorización :Verifica los privilegios del usuario. Esta segunda etapa de control de acceso tiene lugar para cada solicitud en una conexión activa en la que la autenticación se ha realizado correctamente. Para cada solicitud, MySQL determina qué operación desea realizar y luego verifica si tiene suficientes privilegios para hacerlo.

Ver la configuración de la cuenta de usuario

– Consultar la base de datos mysql para ver la información de identificación del usuario:

mysql> SELECT user, host, password
-> FROM mysql.user WHERE user='root'; 
+------+-----------+-------------------------------------------+ 
| user | host      | password                                  | 
+------+-----------+-------------------------------------------+ 
| root | localhost | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | 127.0.0.1 | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | ::1       | *2447D497B9A6A15F2776055CB2D1E9F86758182F |
+------+-----------+-------------------------------------------+ 
3 rows in set (0.00 sec)

Ver toda la información del usuario, incluidos los privilegios:

mysql> SELECT * FROM mysql.user\G 
***************** 1. row ***************** 
...
   Select_priv: Y
   Insert_priv: Y
   Update_priv: Y
   Delete_priv: Y
...

La base de datos mysql contiene la información de todas las cuentas de usuario en el servidor. Para ver esta información, ejecute las instrucciones SELECT que se muestran arriba. El valor Y en un *_priv El campo indica que el privilegio está habilitado. La cuenta raíz tiene acceso completo. Todas sus columnas de privilegios tienen el valor Y.

Además de los privilegios, la tabla de usuarios contiene otra información que es útil en el proceso de autenticación. Por ejemplo, puede ver en el siguiente resultado que el usuario probador:

  • Tiene una contraseña (visible en forma encriptada en la columna Contraseña), y esta contraseña no está vencida (indicado por la N en la columna contraseña_caducada)
  • No tiene límites de recursos definidos (indicado por los 0 en las columnas max_*)
  • No tiene ninguna configuración SSL o x509 (indicado por los valores en blanco en las columnas ssl_* y x509_*)
  • Utiliza el complemento mysql_native_password para autenticarse (el nombre del complemento aparece en la columna del complemento).
*************************** 1. row ***************************
                  Host: localhost
                  User: testuser
              Password: *14E65567ABDB5135D0CFD9A70B3032C179A49EE7
           Select_priv: Y
           Insert_priv: N
...
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string:
      password_expired: N

Autenticación nativa

Cuando se conecta a un servidor MySQL utilizando el complemento de autenticación de contraseña nativo (el mecanismo de autenticación predeterminado), coincide con el nombre de usuario que especificó, el host desde el que se está conectando y su contraseña con filas en la tabla mysql.user para determinar si puedes conectarte y realizar acciones.

Para conectarse al servidor local utilizando el cliente mysql, especifique el nombre de usuario y la contraseña de la cuenta que desea utilizar:

shell> mysql -u[username] -p[password]
Nota que el nombre de host asociado con su usuario en la tabla mysql.user se refiere al nombre del host desde el que se está conectando, no al host del servidor.

Para conectarse a un servidor que no está instalado en el host local de su cliente, proporcione el nombre de host del servidor al que se está conectando:

shell> mysql -u[username] -p[password] -h[server_host]

Crear una cuenta de usuario

Un nombre de cuenta consta de un nombre de usuario y el nombre del host del cliente desde el que el usuario debe conectarse al servidor. Los nombres de cuenta tienen el formato 'user_name'@'host_name '. Los nombres de usuario pueden tener hasta 16 caracteres. Debe usar comillas simples alrededor de los nombres de usuario y los nombres de host si estos contienen caracteres especiales, como guiones. Si un valor es válido como identificador sin comillas, las comillas son opcionales. Sin embargo, siempre puede usar comillas.

Por ejemplo, use la instrucción CREATE USER…IDENTIFIED BY para crear una cuenta:
– Para un usuario llamado jim
– Para conectarse desde localhost
– Usando la contraseña Abc123

CREATE USER 'jim'@'localhost' IDENTIFIED BY 'Abc123';

Evite posibles riesgos de seguridad al crear cuentas:

  • No cree cuentas sin contraseña.
  • No cree cuentas anónimas.
  • Cuando sea posible, evite los comodines cuando especifique nombres de host de cuentas.

Patrones de nombres de host

Use un patrón de anfitrión que contenga el % o _ caracteres comodín para configurar una cuenta que permita al usuario conectarse desde cualquier host en un dominio completo o subred. Si omite la parte de host de un nombre de cuenta al escribir una declaración de administración de cuenta, MySQL asume un nombre de host de %.

Un valor de host de %.example.com coincide con cualquier host en el dominio example.com. Un valor de host de 192.168.% coincide con cualquier host en la subred 192.168. Un valor de host de % coincide con cualquier host, lo que permite al usuario conectarse desde cualquier host. Utilice una dirección IP con una máscara de subred para permitir que el usuario se conecte desde cualquier host con una dirección dentro de esa subred. Por ejemplo, un valor de 10.0.0.0/255.255.255.0 coincide con cualquier host con 10.0.0 en los primeros 24 bits de su dirección IP.

Evite el uso de comodines en los nombres de host, excepto cuando sea estrictamente necesario y esté debidamente auditado para evitar el abuso o la exposición accidental. Ejecute comprobaciones periódicas de la siguiente manera:

mysql> SELECT User, Host FROM mysql.user WHERE Host LIKE '%\%%';

Ejemplos de nombre de usuario y nombre de host:

  • [email protected]
  • juan@'10.20.30.%'
  • juan@'%.nuestrodominio.com'
  • juan@’10.20.30.0/255.255.255.0′

Para especificar una cuenta de usuario anónimo (es decir, una cuenta que coincida con cualquier nombre de usuario), especifique una cadena vacía para la parte del nombre de usuario del nombre de la cuenta:

mysql> CREATE USER ''@'localhost';

Evite crear cuentas anónimas, especialmente las que no tienen contraseña (como en el ejemplo anterior). Esto ayuda a evitar riesgos de seguridad que surgirían al abrir el acceso a la instalación de MySQL. Si un host coincide con dos o más patrones, MySQL elige el patrón más específico.

Configuración de la contraseña de la cuenta

La forma más común de cambiar la contraseña de una cuenta existente sin cambiar ninguno de sus privilegios es usar ESTABLECER CONTRASEÑA declaración. Por ejemplo, para establecer la contraseña de jim en el host local en NewPass, use la siguiente instrucción:

mysql> SET PASSWORD FOR jim@localhost = PASSWORD('NewPass');

Si ha iniciado sesión como usuario no root y su usuario no tiene el privilegio de ACTUALIZAR para la base de datos mysql, solo puede cambiar su propia contraseña. Hágalo utilizando la sentencia SET PASSWORD sin la cláusula FOR:

mysql> SET PASSWORD = PASSWORD('NewPass');

Cuando use ESTABLECER CONTRASEÑA, use la PASSWORD() función para cifrar la contraseña. Tenga en cuenta que la instrucción CREATE USER encripta automáticamente la contraseña que proporciona, por lo que no necesita usar la función PASSWORD() al crear un usuario con CREATE USER.

Utilice los siguientes comandos de mysqladmin para establecer contraseñas desde el shell:

shell> mysqladmin -u root password 'rootpass'
shell> mysqladmin -u root -h host_name password 'rootpass'

En los ejemplos anteriores, 'rootpass' representa la contraseña raíz y 'host_name' es el nombre del host desde el cual la cuenta raíz accede al servidor MySQL.

Confirmación de contraseñas

Asigne contraseñas seguras y únicas a todas las cuentas de usuario. Evite las contraseñas que se pueden adivinar fácilmente. Use la siguiente declaración SELECT para listar cualquier cuenta
sin contraseña:

SELECT Host, User FROM mysql.user WHERE Password = '';

Para identificar contraseñas duplicadas:

SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;

Para hacer caducar la contraseña de cualquier usuario, utilice la siguiente consulta:

ALTER USER jim@localhost PASSWORD EXPIRE;

Para emitir las declaraciones SELECT en los ejemplos anteriores, debe conectarse con una cuenta de usuario con privilegios SELECT en el esquema mysql o la tabla mysql.user. Puede tener varias cuentas que se aplican a un nombre de usuario específico. Por ejemplo, si el usuario jim inicia sesión desde dos ubicaciones y usted configura cuentas para cada ubicación, como jim@localhost y jim@'192.168.14.38', ambas cuentas identificadas como jim pueden tener la misma contraseña.

Puede caducar la contraseña de un usuario con la sentencia ALTER USER…PASSWORD EXPIRE. Si su contraseña caduca, debe cambiar su contraseña utilizando una instrucción SET PASSWORD la próxima vez que inicie sesión. Todas las instrucciones que ejecute que no comiencen con SET devolverán un error hasta que cambie su contraseña, como en este ejemplo:

mysql> SELECT * FROM City WHERE 1=2;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> SET PASSWORD = PASSWORD('new_pwd'); 
Query OK, 0 rows affected (0.01 sec) 

mysql> SELECT * FROM City WHERE 1=2;
Empty set (0.00 sec)

Manipulación de cuentas de usuario

Usa el CAMBIAR NOMBRE DE USUARIO instrucción para cambiar el nombre de una cuenta de usuario:

RENAME USER 'jim'@'localhost' TO 'james'@'localhost';

La consulta anterior cambia el nombre de cuenta de una cuenta existente o cambia el nombre de usuario o el nombre de host partes del nombre de cuenta, o ambos.

Utilice la instrucción DROP USER para eliminar una cuenta de usuario:

DROP USER 'jim'@'localhost';

La consulta anterior revoca todos los privilegios de una cuenta existente y luego elimina la cuenta. También elimina todos los registros de la cuenta de cualquier tabla de concesión en la que existan.

Comprender la autenticación conectable de MySQL
Comprender los privilegios de MySQL


Linux
  1. ¿Gestión de documentos de código abierto?

  2. Gestión básica de usuarios de Linux

  3. Conéctese a una base de datos MySQL de forma remota

  4. Guía para principiantes de administración de software de Linux con RPM

  5. CentOS / RHEL:Guía para principiantes de cron

Guía del programador de eventos y eventos de MySQL

Una guía para principiantes de LVM

Una guía para principiantes sobre los trabajos de Cron

Una guía para principiantes sobre la gestión de usuarios en Ubuntu Desktop y Server

Guía completa de administración de usuarios en Linux

La guía completa para instalar MySQL en Ubuntu