本文介绍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
记录了密码历史。
字段 | 类型 | 含义 |
---|---|---|
Host | char(60) | 主机名 |
User | char(128) | 用户名。 与主机名一起组合成登录账号 |
Password | char(65) | 密码,密文 |
Password_time | datetime | 密码更新时间 |
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将对数据库用户密码提供更全面的防护,包括密码构成、密码重用,密码过期,登录惩罚和禁用等功能。建议用户根据系统安全要求等级,在安全和易用性之间做出平衡。