MySQL管理——密码安全

2023-09-12 19:22:02 浏览数 (1)

在MySQL的日常管理中,密码安全直接关系到数据库的使用,DBA应该在密码管理上特别重视。

密码面临的风险

用户使用密码时,会面临如下风险:

  • 使用多种攻击技术,包括社会工程和密钥记录来发现密码
  • 利用社会工程猜测密码
  • 在系统表或文件中找到密码

注:社会工程意为利用人们在社会中的各种行为、心理、活动等,配上信息技术手段,来获取黑客想要的各种信息。

针对以上风险,MySQL的DBA可以利用如下方法进行防范,降低风险。

  • 启用密码过期策略,限制密码暴露
  • 启用“validate_password”组件,强制使用复杂度高的“强密码”,防止被攻击者轻易猜测
  • MySQL的密码存储在“mysql.user”表中,需要防止不具备管理员权限的用户读取该表,并需要对该表空间文件在操作系统上进行加密

攻击者推导密码的方法

密码在通常情况下通过哈希算法进行处理,但攻击者仍可以通过如下方法推导出密码。

  • 蛮力破解算法:通过使用不同的哈希算法将字符进行组合,以匹配密码使用的算法
  • 字典攻击:使用字典中的字符执行哈希操作,当用户使用安全性不高的密码时,该方法能够快速推导出密码
  • 彩虹表:由重复哈希和简化密码的长链中的第一个和最后一个哈希组成,当攻击者通过相同的算法链运行目标密码哈希,并找到与之匹配的算法链时,攻击者可以通过重播该链来推导密码

MySQL的密码验证组件

MySQL提供了密码验证组件,用以提高密码的安全性。该组件的安装文件名为“component_validate_password.so”保存在“plugin_dir”变量指定的路径下。组件安装成功后,该组件提供几个变量,通过对变量进行设置,以达到不同级别的密码安全要求。

validate_password.policy:强制开启验证密码,默认值为1(MEDIUM),检查密码的长度、数字、小写/大写和特殊字符。如果设置为2(STRONG)需要额外检查字典文件(与字典中的字符匹配将无法作为密码使用),并需要通过"validate_password.dictionary_file“变量指定字典文件。

validate_password.check_user_name:用于检查密码中是否包含用户名,默认情况下开启。

用户可以动态配置变量值,例如,

代码语言:javascript复制
mysql> SET GLOBAL validate_password.policy = 2;
mysql> SET GLOBAL validate_password.length = 12;

也可以将变量值写入配置文件,持久化保存。

与之相关联的变量可以通过SHOW语句查看:

代码语言:javascript复制
mysql> SHOW VARIABLES LIKE 'validate_password.%';
 ------------------------------------------------- -------- 
| Variable_name                                   | Value  |
 ------------------------------------------------- -------- 
| validate_password.changed_characters_percentage | 0      |
| validate_password.check_user_name               | ON     |
| validate_password.dictionary_file               |        |
| validate_password.length                        | 8      |
| validate_password.mixed_case_count              | 1      |
| validate_password.number_count                  | 1      |
| validate_password.policy                        | MEDIUM |
| validate_password.special_char_count            | 1      |
 ------------------------------------------------- -------- 

MySQL用户除了使用上述的密码验证组件强化密码,还可以考虑从以下两方面增加密码的安全性:

  • 为root用户设置强密码
  • 为全部用户的密码指定使用期限,通过”default_password_lifetime“进行配置

0 人点赞