MySQL_ reglas de coincidencia de contraseñas de cuenta y convenciones de nomenclatura

Convención de nomenclatura de cuentas MySQL

Para la versión bilingüe chino-inglés, consulte: Versión chino-inglés de GitHub: convención de nomenclatura de cuentas MySQL

El nombre de cuenta (Account Name) de un usuario de MySQL consta de dos partes:

  • 1. Nombre de usuario
  • 2. Nombre del anfitrión

Por lo tanto, incluso si los nombres de usuario son parcialmente iguales, siempre que las IP del cliente de inicio de sesión sean diferentes, el servidor MySQL puede coincidir con cuentas diferentes.

Este artículo presenta brevemente las reglas de denominación de cuentas, así como las reglas de procesamiento de valores especiales y las reglas comodín.

Las reglas de nomenclatura de las funciones de MySQL son similares a las reglas de nomenclatura de las cuentas; consulte: Sección 6.2.5, “Especificación de nombres de funciones” para obtener más detalles .

En sentencias SQL como CREATE USER, GRANTy , SET PASSWORDla denominación de cuentas sigue las siguientes reglas:

  • 1. El formato del nombre de la cuenta es: 'user_name'@'host_name';
  • 2. Si solo se especifica nombre_usuario, equivale a 'user_name'@'%', por ejemplo, 'me'equivalente a 'me'@'%'.
  • 3. Si el nombre de usuario y el nombre de host son identificadores legales, se pueden omitir las comillas. En caso contrario deberá ir entre comillas, incluidos los siguientes casos:
    • El nombre de usuario contiene caracteres especiales (como espacios o guiones -);
    • La parte del nombre de host contiene caracteres especiales o comodines (por ejemplo, .o ).
    • Ejemplo: si el nombre de la cuenta es 'test-user'@'%.com', entonces tanto la parte del nombre de usuario como la parte del nombre del host deben estar entre comillas.
  • 4. Puede utilizar comillas invertidas (`, comillas invertidas, comas), comillas simples ( ', comillas simples) o comillas dobles ( ", comillas dobles) para encerrar nombres de usuario y nombres de host como identificadores/cadenas. Para conocer reglas específicas sobre citas de cadenas y citas de identificadores, consulte: Sección 9.1.1, “Literales de cadena” y Sección 9.2, “Nombres de objetos de esquema” .
  • 5. El nombre de usuario y el nombre de host son dos partes, que deben citarse por separado.
    • Ejemplo correcto: 'me'@'localhost';
    • Mal ejemplo: 'me@localhost'; porque escribir esto equivale a 'me@localhost'@'%'.
  • 6. El servidor MySQL analizará las referencias a CURRENT_USERpalabras clave y funciones en una cadena que consta del nombre de usuario y el nombre de host del cliente actual.CURRENT_USER()

La información de la cuenta se almacena en la base de datos integrada del sistema mysql, utilizando múltiples tablas de información de autorización para almacenar nombres de usuario y nombres de host a través de diferentes columnas:

  • userCada fila de la tabla representa un número de cuenta. UserLas columnas y Hostson el nombre de usuario y el nombre de host correspondientes. Esta tabla también contiene los permisos globales para cada cuenta.
  • Otras tablas de concesión, que especifican qué permisos a nivel de base de datos y de objeto tiene cada cuenta. Estas tablas también utilizan Userlas Hostcolumnas y para contener nombres de cuentas. Cada fila está asociada con el número de cuenta useren la tabla que tiene los mismos valores Usery .Host
  • UserLas piezas distinguen entre mayúsculas y minúsculas al realizar comprobaciones de permisos . La Hostparte no distingue entre mayúsculas y minúsculas.

Las columnas correspondientes al nombre de usuario y al nombre de host en la tabla de información de autorización también tienen otros atributos (como la longitud máxima), puede consultar Propiedades de columna de alcance de tabla de concesión .

Se admiten comodines y algunos valores especiales para nombres de usuario y nombres de host, como se describe a continuación.

La parte del nombre de usuario puede ser:

  • Si el nombre de usuario es un valor que no está en blanco, el nombre de usuario utilizado por el cliente para conectarse debe ser exactamente el mismo que este valor en términos de caracteres.
  • Si el nombre de usuario es un valor en blanco (cadena vacía), puede coincidir con cualquier nombre de usuario. El nombre de usuario de la cuenta está vacío, es decir, un usuario anónimo. Para especificar un usuario anónimo en SQL, utilice comillas alrededor de la cadena vacía como nombre de usuario, por ejemplo ''@'localhost'.

Los nombres de host pueden admitir múltiples formatos y también se pueden utilizar comodines:

  • Nombre de host, que puede ser un nombre de dominio (nombre de host) o una dirección IP (compatible con IPv4/IPv6). 'localhost'Indica esta máquina. '127.0.0.1'Indica la dirección de bucle invertido IPv4 local. '::1'Significa la dirección de bucle invertido IPv6 local.

  • %y _los comodines pueden hacer coincidencias aproximadas de nombres de host y direcciones IP. Las reglas de coincidencia son consistentes con las declaraciones del estándar SQL LIKE. Por ejemplo, el signo de porcentaje '%'coincide con todos los nombres de host, mientras que '%.mysql.com'coincide con mysql.comtodos los hosts del dominio. Y '198.51.100.%'coincide con todas las direcciones de clase C del segmento de red 198.51.100.

Caso especial: dado que el nombre de host puede utilizar comodines de dirección IP, habrá un agujero de seguridad lógico. Por ejemplo, '198.51.100.%'originalmente quería hacer coincidir el segmento de red de subred, pero ¿qué pasa si un pirata informático 198.51.100.somedomain.comataca esta vulnerabilidad asignando el nombre de dominio? Para evitar este riesgo, el servidor MySQL no comenzará con [número más punto en inglés () .]. Realiza coincidencias aproximadas en nombres de dominio. Por ejemplo, si el nombre de host del cliente es 1.2.example.com, nunca se comparará de manera ambigua con la parte de host de ninguna cuenta. Los comodines de IP solo coincidirán con direcciones IP, no con nombres de dominio.

  • Si el nombre de host se especifica como una dirección IPv4, la máscara de subred también se puede especificar para identificar cuántos bits se utilizan para el número de subred. Esta forma de máscara de subred no admite direcciones IPv6.
    • El formato de sintaxis específico es host_ip/netmask.
    • Ejemplo:
CREATE USER 'cncounter'@'198.51.100.0/255.255.255.0';

Esta cuenta permite a cncounterlos usuarios iniciar sesión desde todos los clientes cuyas direcciones IP cumplan las siguientes condiciones:

client_ip & netmask = host_ip

CREATE USERPara el usuario creado anteriormente a través de cncounter:

# 按位与运算
client_ip & 255.255.255.0 = 198.51.100.0

El rango de direcciones IP que satisfacen esta condición 198.51.100.0es 198.51.100.255.

Una máscara de subred generalmente 1comienza con un bit igual a , seguido de un bit que es 0, ejemplo:

  • 198.0.0.0/255.0.0.0: Dirección de clase A que comienza con 198
  • 198.51.100.0/255.255.0.0: Dirección de clase B que comienza con 198,51
  • 198.51.100.0/255.255.255.0: Dirección de clase C que comienza con 198.51.100
  • 198.51.100.1: solo coincide con hosts con una dirección IP específica

Cuando el servidor MySQL coincide con el valor de host en la cuenta, puede usar la dirección IP del cliente o el nombre de host del cliente devuelto por la resolución DNS del sistema.

Además del valor del host en formato de máscara de subred, el servidor coincidirá con el valor del host en otros formatos como una cadena, incluso si el valor del host de la cuenta se especifica como una dirección IP. Es decir, debemos especificar la parte del host de la cuenta según el formato devuelto por DNS.

Las siguientes son cuestiones a tener en cuenta:

  • Supongamos que hay un host en la LAN local con el nombre completo de host1.example.com. Si el sistema DNS devuelve un valor host1.example.com, entonces la parte del valor del host de la cuenta debe usar este nombre. Si el sistema DNS devuelve sí host1, se debe utilizar host1.
  • Si DNS devuelve un nombre de host en forma de dirección IP para un cliente , coincidirá con 198.51.100.2el valor de host en la cuenta , pero no coincidirá con un 0 adicional. De manera similar, esta IP puede coincidir con cuentas cuyo modo de host sea , pero no coincidirá .198.51.100.2198.051.100.2198.51.100.%198.051.100.%

Para evitar este tipo de problemas, confirme el nombre de host y el formato de dirección devuelto por DNS. Utilice también valores en el mismo formato para el nombre de host de la cuenta MySQL.

Link de referencia

Supongo que te gusta

Origin blog.csdn.net/renfufei/article/details/120013990
Recomendado
Clasificación