Describir en detalle la estrategia de refuerzo de seguridad del usuario de MySQL.

Este es un artículo sobre cómo fortalecer la seguridad del usuario de MySQL. Al leer el artículo completo, puede obtener información sobre las políticas de complejidad de contraseñas, complementos de control de conexión y políticas de cambio de contraseña. El contenido de este artículo es solo de referencia. Consulte el entorno real cuando opere para evitar pérdidas económicas.

Autor: Yu Zhenxing, miembro del equipo de Aikesheng DBA, está interesado en compartir tecnología y escribir documentos técnicos.

Autor: Guan Yongqiang, miembro del equipo de DBA de Aikesheng, tiene buenas habilidades de operación y mantenimiento de MySQL. Me encanta aprender nuevos conocimientos y también soy un otaku al que le encanta jugar.

Producido por la comunidad de código abierto de Aikeson, el contenido original no se puede utilizar sin autorización. Comuníquese con el editor e indique la fuente para la reimpresión.

Este artículo tiene aproximadamente 4000 palabras y se espera que demore 10 minutos en leerlo.

fondo

Con base en los antecedentes de seguridad, los clientes han presentado una serie de requisitos para la seguridad del usuario de MySQL, con la esperanza de fortalecer la seguridad de MySQL. Los requisitos específicos son los siguientes:

clase de contraseña de usuario

  • La contraseña requiere al menos 25 caracteres
    • La contraseña debe contener al menos 2 letras mayúsculas
    • La contraseña debe contener al menos 2 letras minúsculas
    • La contraseña debe contener al menos 2 números
    • La contraseña debe contener al menos 2 caracteres especiales
    • La contraseña no puede contener el nombre de usuario
    • La contraseña no puede consistir en simples caracteres repetidos (por ejemplo: AAA, wuwuwuwu, dsadsadsa, 111)
  • La contraseña debe tener una fecha de vencimiento y debe cambiarse cada 365 días; de lo contrario, caducará y el usuario quedará bloqueado.
  • La contraseña no debe ser una contraseña antigua que se haya utilizado en las últimas 5 veces.
  • La contraseña solo se puede cambiar una vez cada 24 horas
  • La contraseña no puede contener caracteres específicos, como nombre de la empresa, nombre comercial, etc.

Clase de conexión de usuario

  • Si no inicia sesión 10 veces seguidas, deberá esperar 10 minutos y el tiempo de espera seguirá aumentando con cada error.

análisis de la demanda

Según la descripción de antecedentes, podemos dividir los requisitos en tres partes principales:

  • Política de complejidad de contraseñas
  • Estrategia de control de conexión
  • Política de cambio de contraseña

MySQL tiene los siguientes complementos/componentes funcionales y configuraciones para lograr los requisitos anteriores:

  • Complemento/componente de verificación de contraseña
  • Complemento de control de conexión
  • Configuración de atributos de contraseña de usuario

información ambiental

Versión de MySQL: 8.0.33, 5.7.41

Configuración de instalación

1. Configuración del componente de verificación de contraseña

La versión MySQL 5.7 es un complemento de verificación de contraseña. Aunque el método de instalación y la sintaxis de las variables son ligeramente diferentes, las funciones son básicamente las mismas. Las siguientes operaciones solo toman como ejemplo las operaciones de la versión MySQL 8.0. Consulte la documentación oficial para obtener detalles específicos .

## 8.0 版本安装密码校验组件
INSTALL COMPONENT 'file://component_validate_password';

## 查看插件默认配置
show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |    ## 密码不能包含用户名
| validate_password.dictionary_file    |        |    ## 指定密码匹配字典文件,在文件中的字符串不能包含在设置的密码中,在 policy 为 STRONG 时有效
| validate_password.length             | 8      |    ## 密码最小长度,默认至少 8 位长
| validate_password.mixed_case_count   | 1      |    ## 密码至少包含 1 个大小写字母
| validate_password.number_count       | 1      |    ## 密码至少包含一个数字
| validate_password.policy             | MEDIUM |    ## 密码默认复杂度策略
| validate_password.special_char_count | 1      |    ## 密码至少包含一个特殊字符
+--------------------------------------+--------+
7 rows in set (0.0042 sec)

## 修改配置以便符合背景需求
set global validate_password.length=25;
set global validate_password.mixed_case_count=2;
set global validate_password.number_count=2;
set global validate_password.special_char_count=2;

## 查看调整后的配置(动态生效)
show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 25     |
| validate_password.mixed_case_count   | 2      |
| validate_password.number_count       | 2      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 2      |
+--------------------------------------+--------+
7 rows in set (0.0056 sec)

## 持久化配置到 my.cnf 配置文件(永久生效)
## 在 [mysqld] 标签下增加配置
vim /data/mysql/3306/my.cnf.3306 
[mysqld]
## 密码校验组件参数配置
validate_password.check_user_name     = ON
validate_password.policy              = MEDIUM
validate_password.length              = 25
validate_password.mixed_case_count    = 2
validate_password.number_count        = 2
validate_password.special_char_count  = 2

2. Configuración del complemento de control de conexión

El complemento de control de conexión básicamente no ha cambiado en MySQL 5.7 y MySQL 8.0, y ambos se proporcionan en forma de complemento. Las siguientes operaciones solo toman como ejemplo las operaciones de la versión MySQL 8.0. Consulte la documentación oficial para obtener detalles específicos .

## 连接控制插件安装
INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';

## 查看插件默认配置
show variables like 'connection_control%';
+-------------------------------------------------+------------+
| Variable_name                                   | Value      |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 3          | ## 运行登录失败尝试的次数,默认为 3,表示当连接失败 3 次后启用连接控制,0 表示不开启
| connection_control_max_connection_delay         | 2147483647 | ## 响应延迟的最大时间,默认约25天
| connection_control_min_connection_delay         | 1000       | ## 登录失败后响应延迟的最小时间,默认 1000 毫秒,1 秒,每失败一次逐步累加,直到最大值
+-------------------------------------------------+------------+

## 修改配置以便符合背景需求,响应延迟的最大时间设置为 1 天
set global connection_control_max_connection_delay=24*60*60*1000;

## 查看调整后的配置(动态生效)
show variables like 'connection_control%';
+-------------------------------------------------+-------+
| Variable_name                                   | Value |
+-------------------------------------------------+-------+
| connection_control_failed_connections_threshold | 3     |
| connection_control_max_connection_delay         | 86400000 | ## 调整为最大一天
| connection_control_min_connection_delay         | 1000  |
+-------------------------------------------------+-------+

## 持久化配置到 my.cnf 配置文件(永久生效)
## 在 [mysqld] 标签下增加配置
vim /data/mysql/3306/my.cnf.3306 
[mysqld]
## 连接控制插件配置
connection-control                                     = FORCE
connection-control-failed-login-attempts               = FORCE
connection_control_min_connection_delay                = 1000
connection_control_max_connection_delay                = 86400000
connection_control_failed_connections_threshold        = 3

3. Configuración de la política de cambio de contraseña

La configuración de la política de cambio de contraseña de MySQL se registra en mysql.userla tabla. Las configuraciones admitidas por las versiones 5.7 y 8.0 son ligeramente diferentes. Para obtener más detalles, consulte la documentación oficial CREATE USERy algunas descripciones de atributosALTER USER en la sintaxis .password_option

Descripción del significado de los parámetros de configuración relevantes

La versión MySQL 5.7 solo admite:

default_password_lifetime : Período de validez de la contraseña (el valor predeterminado es 0 o NULL), lo que indica que la contraseña es válida permanentemente.

Nota: Aunque configurar la política de caducidad de contraseñas en el entorno en línea puede mejorar la seguridad, si la contraseña no se actualiza a tiempo, provocará problemas de interrupción del negocio y deberá configurarse después de una evaluación exhaustiva.

La versión MySQL 8.0 admite:

default_password_lifetime : Período de validez de la contraseña (el valor predeterminado es 0 o NULL), lo que indica que la contraseña es válida permanentemente.

Nota: Aunque configurar la política de caducidad de contraseñas en el entorno en línea puede mejorar la seguridad, si la contraseña no se actualiza a tiempo, provocará problemas de interrupción del negocio y deberá configurarse después de una evaluación exhaustiva.

contraseña_historia : Un ciclo en el que se pueden reutilizar las contraseñas históricas, lo que indica cuántas contraseñas anteriores en el historial no se pueden reutilizar. La información de las contraseñas históricas se registra en mysql.password_historyla tabla.

contraseña_reuse_interval : especifique cuánto tiempo tardan en reutilizarse las contraseñas históricas, en días.

Con respecto default_password_lifetime、password_historyal password_reuse_intervalproblema de que los atributos predeterminados de los usuarios creados no tienen efecto después de configurar my.cnf, se ha planteado un error de MySQL y se esperan comentarios oficiales para ver si cumple con las expectativas.

Conclusión: no es un error, la comprensión de los parámetros es incorrecta.

Tomando como ejemplo la configuración de caducidad de la contraseña password_reuse_interval, password_historyambas tienen la misma lógica.

  • ALTERAR USUARIO eee LA CONTRASEÑA EXPIRA;
    • La contraseña del usuario eee caduca inmediatamente y el campo contraseña_expirada en la tabla mysql.user está marcado como Y
  • ALTERAR USUARIO eee LA CONTRASEÑA EXPIRA POR DEFECTO;
    • La política de caducidad de contraseña de usuario de eee utiliza el valor especificado por el parámetro global default_password_lifetime como política de caducidad. El campo contraseña_lifetime en la tabla mysql.user es NULL.
  • ALTERAR USUARIO eee LA CONTRASEÑA EXPIRA NUNCA;
    • La política de caducidad de contraseña de usuario de eee está configurada para que nunca caduque y el valor del campo password_lifetime en la tabla mysql.user es 0.
  • ALTERAR USUARIO eee CONTRASEÑA EXPIRAR INTERVALO 3 DÍAS;
    • La política de caducidad de contraseña de usuario de eee está configurada para caducar después de 3 días específicos, y el valor del campo password_lifetime en la tabla mysql.user es 3

Click para agrandar

Con respecto al problema de que cuando password_historylos password_reuse_intervalparámetros y se usan al mismo tiempo, solo password_reuse_intervalel parámetro es realmente válido, se ha planteado un error de MySQL y se esperan comentarios oficiales para ver si cumple con las expectativas.

################## 以5.7版本为例 ##################
## 1. 修改当前默认密码策略为需求所需配置(动态生效)
set global default_password_lifetime=365;

## 2. 查看当前密码有效期配置。这里一定注意,表中的password_lifetime为NULL不是表示无策略,而是表示使用default_password_lifetime参数指定的全局策略
select user,host,password_lifetime from mysql.user where user not in  ('mysql.session','mysql.sys');
+----------+-----------+-------------------+
| user     | host      | password_lifetime |
+----------+-----------+-------------------+
| root     | localhost |              NULL |
| zhenxing | %         |              NULL |
| sysbench | %         |              NULL |
| aaa      | %         |              NULL |
| bbb      | %         |              NULL |
+----------+-----------+-------------------+

## 3. 持久化当前默认密码策略为需求所需配置(永久生效)
## 在[mysqld]标签下增加配置
vim /data/mysql/3306/my.cnf.3306 
[mysqld]
## 密码策略配置
default_password_lifetime = 365

################## 以8.0版本为例 ##################
## 1. 修改当前默认密码策略为需求所需配置(动态生效)
set global default_password_lifetime=365;
set global password_history=5;
set global password_reuse_interval=1;

## 2. 查看当前已存在用户的密码策略配置(默认均为NULL,表示使用default_password_lifetime、password_history、password_reuse_interval参数指定的全局策略)
select user,host,password_lifetime,Password_reuse_history,Password_reuse_time from mysql.user where user not in ('mysql.infoschema','mysql.session','mysql.sys');
+----------+-----------+-------------------+------------------------+---------------------+
| user     | host      | password_lifetime | Password_reuse_history | Password_reuse_time |
+----------+-----------+-------------------+------------------------+---------------------+
| aaa      | %         |              NULL |                   NULL |                NULL |
| sysbench | %         |              NULL |                   NULL |                NULL |
| zhenxing | %         |              NULL |                   NULL |                NULL |
| backup   | 127.0.0.1 |              NULL |                   NULL |                NULL |
| backup   | localhost |              NULL |                   NULL |                NULL |
| root     | localhost |              NULL |                   NULL |                NULL |
+----------+-----------+-------------------+------------------------+---------------------

## 3. 持久化当前默认密码策略为需求所需配置(永久生效)
## 在[mysqld]标签下增加配置
vim /data/mysql/3306/my.cnf.3306 
[mysqld]
## 密码策略配置
default_password_lifetime = 365
password_history          = 5
password_reuse_interval   = 1

Verificación funcional

1. Componente de verificación de contraseña

La versión MySQL 5.7 es un complemento de verificación de contraseña. Existen diferencias de sintaxis en el método de instalación y las variables, pero las funciones son básicamente las mismas. Las siguientes operaciones solo toman la operación de la versión 5.7 como ejemplo.

################## 以5.7版本为例 ##################
##1.查看当前密码校验插件配置信息
mysql> show variables like 'validate%';
+--------------------------------------+-----------------------+
| Variable_name                        | Value                 |
+--------------------------------------+-----------------------+
| validate_password_check_user_name    | ON                    |
| validate_password_dictionary_file    | /usr/share/dict/words |
| validate_password_length             | 25                    |
| validate_password_mixed_case_count   | 2                     |
| validate_password_number_count       | 2                     |
| validate_password_policy             | STRONG                |
| validate_password_special_char_count | 2                     |
+--------------------------------------+-----------------------+
7 rows in set (0.00 sec)

## 2. 进行验证
## 2.1 验证密码不符合 validate_password_mixed_case_count≥2 时,是否可以成功新建用户
mysql> create user test33@'%' identified WITH 'mysql_native_password' by'1234567890@#$tyuiopasdfg';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

## 2.2 验证密码不符合 validate_password_number_count≥2 时,是否可以成功新建用户
mysql> create user test33@'%' identified WITH 'mysql_native_password' by'qazwsxEDCRFVtgb%$#ujmnbgf';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

## 2.3 验证密码不符合 validate_password_special_char_count≥2 时,是否可以成功新建用户
mysql> create user test33@'%' identified WITH 'mysql_native_password' by'1qazWSXEDCdsa321321321dsadwq';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

## 2.4 验证密码不符合 validate_password_length≥25 时,是否可以成功新建用户
mysql> create user test33@'%' identified WITH 'mysql_native_password' by'123!@#qazWWSX';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

## 2.5 关闭大小写字母数量验证功能,验证使用的密码记录在密码字典中时(2167sags$er24sfwjdtegcfaskvc),是否可以成功新建用户
[root@10-186-60-13 dict]# cat words 
12!@qwqw
12qw!@qw
2167sags$er24sfwjdtegcfaskvc
mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'validate%';
+--------------------------------------+-----------------------+
| Variable_name                        | Value                 |
+--------------------------------------+-----------------------+
| validate_password_check_user_name    | ON                    |
| validate_password_dictionary_file    | /usr/share/dict/words |
| validate_password_length             | 25                    |
| validate_password_mixed_case_count   | 0                     |
| validate_password_number_count       | 2                     |
| validate_password_policy             | STRONG                |
| validate_password_special_char_count | 2                     |
+--------------------------------------+-----------------------+
7 rows in set (0.00 sec)
mysql> create user test33@'%' identified WITH 'mysql_native_password' by'2167sags$er24sfwjdtegcfaskvc';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> set global validate_password_mixed_case_count=2;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'validate%';
+--------------------------------------+-----------------------+
| Variable_name                        | Value                 |
+--------------------------------------+-----------------------+
| validate_password_check_user_name    | ON                    |
| validate_password_dictionary_file    | /usr/share/dict/words |
| validate_password_length             | 25                    |
| validate_password_mixed_case_count   | 2                     |
| validate_password_number_count       | 2                     |
| validate_password_policy             | STRONG                |
| validate_password_special_char_count | 2                     |
+--------------------------------------+-----------------------+
7 rows in set (0.00 sec)

2. Conecte el complemento de control

La versión MySQL 5.7 es un complemento de control de conexión con básicamente las mismas funciones. Las siguientes operaciones solo toman la operación de la versión 5.7 como ejemplo.

################## 以5.7版本为例 ##################
## 1. 查看当前连接插件配置信息
mysql> show variables like 'connection_control%';
+-------------------------------------------------+-------+
| Variable_name                                   | Value |
+-------------------------------------------------+-------+
| connection_control_failed_connections_threshold | 3     |
| connection_control_max_connection_delay         | 86400 |
| connection_control_min_connection_delay         | 1000  |
+-------------------------------------------------+-------+
3 rows in set (0.00 sec)

## 2. 新建测试用户后,尝试三次连接失败,观察等待时间,观察到等待反馈登录失败的时间会越来越长
mysql> create user test33@'%' identified WITH 'mysql_native_password' by'1qaz@WSX#EDC4rfv5tgb6yhnZVAF';
Query OK, 0 rows affected (0.00 sec)
mysql> ^DBye
[root@10-186-60-13 ~]# /opt/mysql/base/5.7.25/bin/mysql -utest33 -p -S /opt/mysql/data/3306/mysqld.sock
Enter password: 
ERROR 1045 (28000): Access denied for user 'test33'@'localhost' (using password: YES)
[root@10-186-60-13 ~]# /opt/mysql/base/5.7.25/bin/mysql -utest33 -p -S /opt/mysql/data/3306/mysqld.sock
Enter password: 
ERROR 1045 (28000): Access denied for user 'test33'@'localhost' (using password: YES)
[root@10-186-60-13 ~]# /opt/mysql/base/5.7.25/bin/mysql -utest33 -p -S /opt/mysql/data/3306/mysqld.sock
Enter password: 
ERROR 1045 (28000): Access denied for user 'test33'@'localhost' (using password: YES)
[root@10-186-60-13 ~]# /opt/mysql/base/5.7.25/bin/mysql -utest33 -p -S /opt/mysql/data/3306/mysqld.sock
Enter password: 
ERROR 1045 (28000): Access denied for user 'test33'@'localhost' (using password: YES)
[root@10-186-60-13 ~]# /opt/mysql/base/5.7.25/bin/mysql -utest33 -p -S /opt/mysql/data/3306/mysqld.sock
Enter password: 
ERROR 1045 (28000): Access denied for user 'test33'@'localhost' (using password: YES)
[root@10-186-60-13 ~]# /opt/mysql/base/5.7.25/bin/mysql -utest33 -p -S /opt/mysql/data/3306/mysqld.sock
Enter password: 

3. Política de cambio de contraseña

La configuración de la política de cambio de contraseña de MySQL se registra en mysql.userla tabla. Las configuraciones admitidas por las versiones 5.7 y 8.0 son ligeramente diferentes. A continuación se mostrará el proceso de prueba y los resultados de las pruebas de las dos versiones.

################## 以5.7版本为例 ##################
## 1. 检查当前密码变更策略相关信息
mysql> select @@default_password_lifetime\G
*************************** 1. row ***************************
@@default_password_lifetime: 365
1 row in set (0.00 sec)

## 2. 新建 test33 用户,设置其密码过期时间为一天,修改机器时间重启再使用该用户进行登录操作,观察到提示密码过期
mysql> CREATE USER 'test33'@'%'
    -> IDENTIFIED WITH 'mysql_native_password' 
    -> BY
    -> '1qaz@WSX#EDC4rfv5tgb6yhnZVAF'
    -> REQUIRE NONE 
    -> PASSWORD EXPIRE INTERVAL 1 DAY;
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password_lifetime from mysql.user where host!='localhost' and user not in ('mysql.infoschema','mysql.session','mysql.sys');
+-------------+-----------+-------------------+
| user        | host      | password_lifetime |
+-------------+-----------+-------------------+
| root        | 127.0.0.1 |              NULL |
| universe_op | %         |              NULL |
| test4       | %         |              NULL |
| tt          | %         |              NULL |
| test33      | %         |                 1 |
+-------------+-----------+-------------------+
5 rows in set (0.00 sec)

[root@10-186-60-13 dict]# date
Tue Aug 22 16:53:22 CST 2023
[root@10-186-60-13 dict]# timedatectl set-time '2023-8-23 16:53:20'
[root@10-186-60-13 dict]# date
Wed Aug 23 16:53:20 CST 2023


[root@10-186-60-13 ~]# /opt/mysql/base/5.7.25/bin/mysql -utest33 -p1qaz@WSX#EDC4rfv5tgb6yhnZVAF -S /opt/mysql/data/3306/mysqld.sock
mysql> select now();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.



################## 以8.0版本为例 ##################
##1.检查当前密码变更策略相关信息
mysql> select @@default_password_lifetime,@@password_history,@@password_reuse_interval,@@password_require_current\G
*************************** 1. row ***************************
@@default_password_lifetime: 365
         @@password_history: 5
  @@password_reuse_interval: 1
 @@password_require_current: 1
1 row in set (0.00 sec)

## 2. 进行验证
## 2.1 密码过期验证参考 5.7 此处不再赘述

## 2.2 新建 test33 用户,并进行密码修改,测试当使用近 5 次密码时,是否能修改密码成功
mysql> create user test33@'%' identified WITH 'mysql_native_password' by'1qaz@WSX#EDC4rfv5tgb6yhnZVAF';
mysql> alter user test33@'%' identified WITH 'mysql_native_password' by'1qaz@WSX#EDC4rfv5tgb6yhnZVAF';
ERROR 3638 (HY000): Cannot use these credentials for 'test33@%' because they contradict the password history policy
mysql> alter user test33@'%' identified WITH 'mysql_native_password' by'1qaz@WSX#EDC4rfv5tgb6yhnZVAG';
Query OK, 0 rows affected (0.00 sec)
mysql> alter user test33@'%' identified WITH 'mysql_native_password' by'1qaz@WSX#EDC4rfv5tgb6yhnZVAF';
ERROR 3638 (HY000): Cannot use these credentials for 'test33@%' because they contradict the password history policy

suplemento de conocimientos

validate_password.dictionary_fileInstrucciones de configuración para .

validate_password.dictionary_fileEl archivo de diccionario de contraseñas especificado por el parámetro adopta la siguiente lógica:

  • El tamaño máximo del archivo es 1M , una línea es una cadena
  • Este archivo solo validate_password.policytiene efecto cuando el parámetro está establecido en 2 o FUERTE
  • Cada línea debe tener al menos 4 caracteres y puede tener como máximo 100 caracteres. No se tendrá ningún efecto si la longitud es inferior o superior a la longitud.
  • Las letras en inglés de este archivo deben estar todas en minúsculas, pero se ignorarán las mayúsculas y minúsculas al buscar contraseñas.
  • Para cada línea de caracteres en el archivo se utiliza una coincidencia difusa , es decir, esta cadena de caracteres no puede aparecer en la contraseña. Por ejemplo, si una línea en el archivo es zhenxing, las reglas de adaptación son las siguientes:
-- 密码字段文件内容
cat /data/mysql/3306/tmp/password_list.txt
zhenxing

create user demo identified by 'aaBB11__zhenxing';   -- 不支持,包含完整的 zhenxing 字符串
create user demo identified by 'aaBB1zhenxing1__';   -- 不支持,包含完整的 zhenxing 字符串
create user demo identified by 'zhenxingaaBB11__';   -- 不支持,包含完整的 zhenxing 字符串
create user demo identified by 'aaBB1zhen00xing1__';  -- 支持,
  • Agregar o eliminar datos al archivo requiere una reconfiguración antes de que pueda surtir efecto dinámicamente. Por ejemplo, primero ajústelo al valor predeterminado y luego restablezcalo al valor del archivo especificado.
    • set global validate_password.dictionary_file=default;
    • set global validate_password.dictionary_file='/data/mysql/3306/tmp/password_list.txt';
    • Puede observar show global status like 'validate_password.dictionary_file%';el resultado de para ver la última hora efectiva del archivo.
  • La función principal de este archivo es en realidad similar al escenario en los requisitos de fondo: [La contraseña no puede contener caracteres específicos, como nombre de la empresa, nombre comercial, etc.], el nombre de la empresa, el nombre comercial, etc. se pueden configurar en Este archivo

Resumir

  1. Antes de utilizar las funciones anteriores, debe confirmar la compatibilidad con diferentes versiones de MySQL.
  2. Algunos complementos en MySQL 5.7 se han ajustado a componentes posteriores a MySQL 8.0. Preste atención a los cambios en la sintaxis y los nombres de los parámetros cuando los use.
  3. MySQL versión 8.0 tiene configuraciones de contraseña más refinadas, como agregar password_history, password_reuse_intervaletc.
  4. Al configurar MySQL, default_password_lifetimedebe prestar atención al impacto en el negocio para evitar el riesgo de interrupción del negocio causado por la caducidad de la contraseña.
  5. Al utilizar el complemento de control de conexión, debe prestar atención para evitar una gran cantidad de errores y excepciones, lo que provocará un largo tiempo de espera para la conexión de la cuenta. Si habilitarlo o no debe juzgarse exhaustivamente en función del Escenario empresarial y seguridad.

Funciones no implementadas en los requisitos.

  • La contraseña solo se puede cambiar una vez cada 24 horas
  • La contraseña no puede consistir en simples caracteres repetidos (por ejemplo: AAA, wuwuwuwu, dsadsadsa, 111)

Para obtener más artículos técnicos, visite: https://opensource.actionsky.com/

Acerca de SQLE

SQLE es una plataforma integral de gestión de calidad de SQL que cubre la auditoría y gestión de SQL desde los entornos de desarrollo hasta los de producción. Admite bases de datos nacionales, comerciales y de código abierto convencionales, proporciona capacidades de automatización de procesos para el desarrollo, operación y mantenimiento, mejora la eficiencia en línea y mejora la calidad de los datos.

obtener SQLE

tipo DIRECCIÓN
Repositorio https://github.com/actiontech/sqle
documento https://actiontech.github.io/sqle-docs/
noticias de lanzamiento https://github.com/actiontech/sqle/releases
Documentación de desarrollo del complemento de auditoría de datos https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
Tang Xiaoou, fundador de SenseTime, falleció a la edad de 55 años . PHP se estancó en 2023. El sistema Hongmeng está a punto de independizarse y muchas universidades han creado "clases Hongmeng". La versión para PC de Quark Browser ha comenzado a realizar pruebas internas. . ByteDance fue "prohibido" por OpenAI. La nueva empresa de Zhihuijun refinanciada, con una cantidad de más de 600 millones de yuanes y una valoración previa al dinero de 3.500 millones de yuanes. Los asistentes de código de IA son tan populares que ni siquiera pueden competir en la programación. Clasificación de idiomas El módem 5G y la tecnología de radiofrecuencia del Mate 60 Pro están muy por delante No Star, No Fix MariaDB se separa de SkySQL y se forma como empresa independiente
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/actiontechoss/blog/10322727
Recomendado
Clasificación