自定义DWS密码策略
创建用户或修改用户时需要指定密码,DWS有默认的密码复杂度要求,也支持用户自定义数据库账户密码策略。
DWS默认密码策略
DWS默认进行密码复杂度校验,默认密码策略要求如下:
- 长度为8~32个字符。
- 至少包含大写字母、小写字母、数字或特殊字符中三种的组合。
- 不能是用户名和用户名反序,此条要求为非大小写敏感。
- 不能是当前密码、当前密码的反序。
自定义密码策略
密码策略包含:密码复杂度要求、密码有效期、密码重用设置以及密码的加密方式及密码重试与锁定,不同的策略项由对应的GUC参数控制,参见下表(详细内容也可参考安全和认证(postgresql.conf)):
密码策略 |
对应参数名称 |
参数描述 |
参数取值范围 |
DWS默认值 |
---|---|---|---|---|
是否进行密码复杂度检查 |
password_policy |
创建或者修改DWS账户时,该参数决定是否进行密码复杂度检查。 |
整型,0、1
|
1 |
密码复杂度要求 |
password_min_length |
密码的最小长度。 |
整型,6~999 |
8 |
password_max_length |
密码的最大长度。 |
整型,6~999 |
32 |
|
password_min_uppercase |
包含大写字母(A-Z)的最少个数。 |
整型,0~999
|
0 |
|
password_min_lowercase |
包含小写字母(a-z)的最少个数。 |
整型,0~999
|
0 |
|
password_min_digital |
包含数字(0-9)的最少个数。 |
整型,0~999
|
0 |
|
password_min_special |
包含特殊字符的最少个数(特殊字符的列表请参见表2)。 |
整型,0~999
|
0 |
|
密码有效期 |
password_effect_time |
用户的密码有效期。当达到所设置的密码到期提醒天数password_notify_time时,系统会在用户登录数据库时提示用户修改密码。 |
浮点型,0~999,单位为天。
|
90 |
password_notify_time |
密码到期前提醒的天数。 |
整型,0~999,单位为天。
|
7 |
|
密码重用设置 |
password_reuse_time |
不可重用天数。 |
浮点型,0~3650,单位为天。
|
60 |
password_reuse_max |
不可重用次数。 |
整型,0~1000
|
0 |
|
加密方式 |
password_encryption_type |
采用何种加密方式对用户密码进行加密存储。 |
0、1、2
|
1 |
重试与锁定 |
password_lock_time |
账户被锁定后自动解锁的时间 |
浮点型,0~365,单位为天。
|
1 |
failed_login_attempts |
如果输入密码错误的次数达到failed_login_attempts则当前账户被锁定,password_lock_time秒后被自动解锁。 |
整型,0~1000
|
10 |
示例二:配置密码有效期password_effect_time参数。
- 使用如下命令连接数据库。
gsql -d postgres -p 25308
postgres为需要连接的数据库名称,25308为CN的端口号。
连接成功后,系统显示类似如下信息:
gsql ((GaussDB x.x.x build 39137c2d) compiled at 2022-04-01 15:43:11 commit 3629 last mr 5138 release) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. postgres=#
- 查看已配置的参数。
1 2 3 4 5
SHOW password_effect_time; password_effect_time ---------------------- 90 (1 row)
如果显示结果不为90,执行“\q”命令退出数据库。
- 执行如下命令设置成默认值90(不建议设置为0)。
gs_guc reload -Z coordinator -Z datanode -N all -I all -c "password_effect_time = 90"
密码设置和修改
- 建议系统管理员和普通用户都要定期修改自己的账户密码,避免账户密码被非法窃取。
以修改用户user1密码为例,使用管理员用户连接数据库并执行如下命令:
1
ALTER USER user1 IDENTIFIED BY 'newpassword' REPLACE 'oldpassword';
- 管理员可以修改自己的或者其他账户的密码。通过修改其他账户的密码,解决用户密码遗失所造成无法登录的问题。
1
ALTER USER joe IDENTIFIED BY 'password';

- 系统管理员之间不允许互相修改对方密码。
- 系统管理员可以修改普通用户密码且不需要用户原密码。
- 系统管理员可以修改自己的密码但需要管理员原密码。