作者:哀乐交加6 | 来源:互联网 | 2023-09-17 13:38
GBase 8a集群数据库用户密码策略功能,password_format_option参数设置,包括数字,字母,大小写,特殊符号等。
默认配置
gbase> show variables like '%password%';
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| _gbase_check_password_format | OFF |
| gbase_caching_sha2_password | OFF |
| old_passwords | OFF |
| password_format_option | 0 |
| password_life_time | 0 |
| password_min_length | 0 |
| password_reuse_max | 0 |
| password_reuse_time | 0 |
| report_password | |
+------------------------------+-------+
9 rows in set (Elapsed: 00:00:00.10)
password_format_option
说明
密码的组合要求,默认值为 0,表示无复杂度要求。
组合中可包含数字(1)、小写字符(2)、大写字符(4)、其它字符(8)中的 1 种或多种。
1:表示必须包含数字。
2:表示必须包含小写字母。
4:表示必须包含大写字母。
8:表示必须包含其它字符。
16:表示不能和用户名相同。
要限定组合时配置为上述值的和,可以任 意组合。 例 如 : 限 定 包 含 所 有 种 类 字 符 为 (1+2+4+8=15)。 对非英文字符,按其对应的 ASII 码范围分类
注意:从9.5.2.44版本开始,该参数改变为0-4,表示从4种组合种最少选择几种。比如3,表示最少要从数字,大写字母,小写字母,特殊字符这4种组合中选择3种。
样例
[root@gbase86_1 zxq]# gccli -umasked -pmasked12
GBase client 8.6.2.38-R1.105911. Copyright (c) 2004-2018, GBase. All Rights Reserved.
gbase> set password=password('masked12');
ERROR 1802 (HY000): Invalid password format,length should >= 8 and contain 'number' 'small letter' 'captital letter' 'special character'.
gbase> set password=password('masked12#Z');
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> ^CAborted
[root@gbase86_1 zxq]# gccli -umasked -pmasked12#Z
GBase client 8.6.2.38-R1.105911. Copyright (c) 2004-2018, GBase. All Rights Reserved.
gbase>
password_reuse_max
说明
限制用户使用指定间隔次数内的历史密码。
默认值为 0,表示不控制。正数值 N 表示允许的口令间隔,间隔次数大于 N 才允许设置。
样例
如下是password_reuse_max=3的一个测试报错信息。
[gbase@gbase_rh7_001 ~]$ gccli -uroot -p111111
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[gbase@gbase_rh7_001 ~]$ gccli -uroot -p222222
GBase client 9.5.2.36.125743. Copyright (c) 2004-2021, GBase. All Rights Reserved.
gbase> set password=password('111111');
ERROR 1758 (HY000): gcluster dal error: 10.0.2.101:Password is in history for user 'root'@'%'..
gbase>
gbase> set password=password('222222');
ERROR 1758 (HY000): gcluster dal error: 10.0.2.101:Password is in history for user 'root'@'%'..
gbase>
gbase>
gbase> set password=password('333333');
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> set password=password('111111');
ERROR 1758 (HY000): gcluster dal error: 10.0.2.101:Password is in history for user 'root'@'%'..
gbase> set password=password('222222');
ERROR 1758 (HY000): gcluster dal error: 10.0.2.101:Password is in history for user 'root'@'%'..
gbase>
password_reuse_time
说明
密码重复使用时最短间隔天数。超过了才能重复使用。默认0不限制。
样例
如下样例,设置了重用次数是3,重用间隔是1天,我们设置多个密码后(超过3个)尝试设置之前的密码,看结果依然报错。查看user_check元数据表,发现密码历史记录了我们设置的全部内容,也就是保存的内容在max(天数,重用次数)。
gbase> show variables like '%password_reuse_%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| password_reuse_max | 3 |
| password_reuse_time | 1 |
+---------------------+-------+
2 rows in set (Elapsed: 00:00:00.00)
gbase> set password=password('1');
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> set password=password('2');
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> set password=password('3');
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> set password=password('4');
Query OK, 0 rows affected (Elapsed: 00:00:00.03)
gbase> set password=password('5');
Query OK, 0 rows affected (Elapsed: 00:00:00.04)
gbase> set password=password('1');
ERROR 1758 (HY000): gcluster dal error: 10.0.2.101:Password is in history for user 'root'@'%'..
password_life_time
说明
控制密码的有效期,达到有效期后用户密码自动过期。用户密码过期后,允许用户登录,在执行 SQL 时提示用户修改密码。此时允许用户修改自己的密码。必须修改密码后才允许执行其它 SQL。
默认值为 0,表示禁用密码过期。正数值 N表示密码过期天数,密码必须在 N 天后修改。
样例
密码过期后,唯一能运行的SQL就是修改密码 ,建议用集群自带的命令行客户端gccli。
其它工具包括JDBC接口,可能会在连接是发送一些额外的初始化环境参数,比如字符集,超时等,而这些设置也属于SQL,会报错导致连接失败。
gbase> alter user root password expire;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> use vc01.testdb;
ERROR 1830 (HY000): You must reset your password using ALTER USER statement before executing this statement.
gbase> set password=password('111111');
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> use vc01.testdb;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)