南大通用GBase 8a数据库用户密码安全相关参数汇总

本文介绍GBase 8a在数据库用户密码方面功能,包括密码构成、密码重用,密码过期,登录惩罚和禁用,为数据库安全控制提供了更多的选择和手段。

密码相关参数

测试版本 9.5.2.44。8.6.2Build43_R36

提醒:这些参数,在所有节点的gcluster和gnode配置文件必须全部修改,否则更严格的限制参数将导致部分节点密码设置失败,出现【无法自动恢复】的event。

这些参数只允许通过配置文件修改,不允许set设置。

gbase> show variables like 'password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| password_format_option               | 0     |
| password_life_time                   | 0     |
| password_max_contain_continuous_char | 0     |
| password_min_length                  | 0     |
| password_not_same_reverse_username   | OFF   |
| password_reuse_max                   | 0     |
| password_reuse_time                  | 0     |
+--------------------------------------+-------+
7 rows in set (Elapsed: 00:00:00.00)

密码策略参数

password_format_option

密码内容格式参数。包括大写字母、小写字母、数字以及特殊字符4种中的几种。该参数在9.5.2.44以前的版本含义有变动,请参考后面文章介绍。

参考 https://www.gbase8.cn/471#password_format_option

建议参数值:3。

password_max_contain_continuous_char

包含连续字段字符的最大长度,默认值0为不限制。允许范围0-65535。

字典在password_format_option里有说明,。如果一个字典类型内的字符连续长度超过参数,则为不符合要求的密码。 新版集群数据库用户(root和gbase)默认密码符合参数值为4的要求。

建议参数值:4

password_not_same_reverse_username

密码是否可以包含和用户名相同或逆序。默认为0表示禁止该参数;1表示不允许包含用户名或逆序。

建议参数值:1

password_min_length

密码最短长度,默认值0表示禁用参数。允许范围0-65535。

参考 https://www.gbase8.cn/471#password_min_length

建议参数值:不小于8

密码重用控制

password_reuse_max

密码允许重用的间隔次数。0表示不控制。正数N 表示允许口令重用间隔,大于等于参数值时,可以设置成功。

比如2,则PassA、PassB、PassC、PassA, 因为PassA间隔达到了2个,可以设置成功。

参考 https://www.gbase8.cn/471#password_reuse_max

password_reuse_time

限定使用指定天数内的历史密码。默认值0为不控制。N表示允许的口令间隔大于N天才允许设置。

参考 https://www.gbase8.cn/471#password_reuse_time

元数据表gbase.password_history

记录了密码历史。

字段类型含义
Hostchar(60)主机名
Userchar(128)用户名。 与主机名一起组合成登录账号
Passwordchar(65)密码,密文
Password_timedatetime密码更新时间
gbase> select * from  gbase.password_history\G
*************************** 1. row ***************************
         Host: %
         User: abc
     Password: *0D3CED9BEC10A777AEC23CCC353A8C08A633045E
Password_time: 2023-06-26 16:11:29
*************************** 2. row ***************************
         Host: %
         User: abc
     Password: *5F2520BCD7BBF8F5AF5314066F74A2A0F9C85028
Password_time: 2023-06-26 16:11:55
2 rows in set (Elapsed: 00:00:00.00)

密码有效期控制

password_life_time

密码过期时间天数。 默认0为禁用该参数。正数值N表示密码过期天数,在密码N天后登录必须修改,否则登录后,除了修改密码外的其它任何功能全部禁用。

参数相关参考 https://www.gbase8.cn/471#password_life_time

密码过期相关管理操作,参考 GBase 8a集群数据库用户密码过期功能

数据库初始安装默认密码

密码符合推荐的安全要求

  • password_max_contain_continuous_char=4
  • password_format_option=3
  • password_not_same_reverse_username=1
  • password_min_length=8

请联系产品提供人员获取新的默认密码。

新用户首次登录命令行客户端提示修改密码

新建用户,第一次登录时给出提示修改密码的提示信息。可以由数据库dba在创建用户时,自行登录一次来避免。

该功能非强制,仅提醒,故无实际作用,特别是用jdbc等客户端登录时。在后续版本很可能取消或看不到效果。

密码策略变更

如变更后的新策略比老策略更严格,在用户登录后提示修改密码。

该功能非强制,仅提醒,故无实际作用,特别是用jdbc等客户端登录时。在后续版本很可能取消或看不到效果。

尝试密码登录惩罚

  • 同一个账号连续登录错误次数超过限制后,将锁定该账号一段时间再次登录,提示账号锁定信息。
  • 锁定时间随着登录失败次数越来越长。
  • 锁定期结束自动解锁。连续登录失败次数超过最高次数限制,锁定账号时间将会延长。
  • 连续登录失败次数超过最大允许次数后,将永久锁定账号,必须由管理员手工解锁。

有关参数如下,这些参数必须同时设置(非0)锁定功能才能生效。

+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| login_attempt_times | 0     |
| login_locked_factor | 0     |
| login_locked_time   | 0     |
+---------------------+-------+

login_attempt_times

用户登录失败超过该次数,将锁定一段时间。

参数范围:0-65535

默认值:0 不限制

建议值:3 ,连续3次登录失败,锁定账号一段时间

login_locked_time

锁定的时间,单位为分钟

参数范围:0-180

默认值:0 不限制

建议值:30, 嗯。。。 其实有点大了,根据项目安全要求设定吧,普通项目1-3分钟可以了。

login_locked_factor

锁定时间惩罚因子。 锁定后,如果再次登录失败,锁定时间会乘以这个参数和失败次数

参数范围:0-10

默认值:0 锁定时间无效

建议值:2, 即每次锁定时间(锁定时间*失败次数*惩罚因子)。比如每次锁定1分钟,第1次锁定1*1*2=分,第2次为1*2*2=4分,第3次为1*3*2=6分,第10次为1*10*2=20分。

最大密码登录次数永久锁定

login_attempt_max

连续登录达到该次数后,将永久锁定该账号,无法由系统自动解锁,必须管理员手工解锁。

参考 GBase 8a数据库登录最大登录错误次数 login_attempt_max。账号锁定lock和手工unlokc解锁

总结

GBase 8a将对数据库用户密码提供更全面的防护,包括密码构成、密码重用,密码过期,登录惩罚和禁用等功能。建议用户根据系统安全要求等级,在安全和易用性之间做出平衡。