更新时间:2024-10-10 GMT+08:00

自定义GaussDB(DWS)密码策略

创建用户或修改用户时需要指定密码,GaussDB(DWS)有默认的密码复杂度要求,也支持用户自定义数据库账户密码策略。

GaussDB(DWS)默认密码策略

GaussDB(DWS)默认进行密码复杂度校验(即GUC参数password_policy默认为1),默认密码策略要求如下:

  • 长度为8~32个字符。
  • 至少包含大写字母、小写字母、数字或特殊字符中三种的组合。
  • 不能是用户名和用户名反序,此条要求为非大小写敏感。
  • 不能是当前密码、当前密码的反序。

自定义密码策略

密码策略包含:密码复杂度要求、密码有效期、密码重用设置以及密码的加密方式及密码重试与锁定,不同的策略项由对应的GUC参数控制,参见下表(详细内容也可参考安全和认证(postgresql.conf)):

表1 自定义密码策略及对应GUC参数

密码策略

对应参数名称

参数描述

参数取值范围

GaussDB(DWS)默认值

是否进行密码复杂度检查

password_policy

创建或者修改GaussDB(DWS)账户时,该参数决定是否进行密码复杂度检查。

整型0、1
  • 0表示不采用任何密码复杂度策略。设置为0会存在安全风险,不建议设置为0
  • 1表示采用默认密码复杂度校验策略。

1

密码复杂度要求

password_min_length

密码的最小长度。

整型,6~999

8

password_max_length

密码的最大长度。

整型,6~999

32

password_min_uppercase

包含大写字母(A-Z)的最少个数。

整型,0~999

  • 0表示没有限制。
  • 1~999表示创建账户所指定的密码中至少需要包含大写字母个数。

0

password_min_lowercase

包含小写字母(a-z)的最少个数。

整型,0~999

  • 0表示没有限制。
  • 1~999表示创建账户所指定的密码中至少需要包含小写字母个数。

0

password_min_digital

包含数字(0-9)的最少个数。

整型,0~999

  • 0表示没有限制。
  • 1~999表示创建账户所指定的密码中至少需要包含数字个数。

0

password_min_special

包含特殊字符的最少个数(特殊字符的列表请参见表2)。

整型,0~999

  • 0表示没有限制。
  • 1~999表示创建账户所指定的密码中至少需要包含特殊字符个数。

0

密码有效期

password_effect_time

用户的密码有效期。当达到所设置的密码到期提醒天数password_notify_time时,系统会在用户登录数据库时提示用户修改密码。

浮点型,0~999,单位为天。

  • 0表示不开启有效期限制功能。
  • 1~999表示创建账户所指定的密码有效期,临近或超过有效期系统会提示用户修改密码。

90

password_notify_time

密码到期前提醒的天数。

整型,0~999,单位为天。

  • 0表示不开启提醒功能。
  • 1~999表示账户密码到期前提醒的天数。

7

密码重用设置

password_reuse_time

不可重用天数。

浮点型,0~3650,单位为天。

  • 0表示不检查密码可重用天数。
  • 正数表示新密码不能为该值指定的天数内使用过的密码。

60

password_reuse_max

不可重用次数。

整型,0~1000

  • 0表示不检查密码可重用次数。
  • 正整数表示新密码不能为该值指定的次数内使用过的密码。

0

加密方式

password_encryption_type

采用何种加密方式对用户密码进行加密存储。

0、1、2

  • 0表示采用md5方式对密码加密。密码存储方式为md5加密后密文。不建议用户使用。
  • 1表示采用sha256方式对密码加密,兼容postgres客户端的md5用户认证方式。密码存储方式为md5+sha256综合后的密文。
  • 2表示采用sha256方式对密码加密。密码存储方式为sha256加密后密文。

1

重试与锁定

password_lock_time

账户被锁定后自动解锁的时间

浮点型,0~365,单位为天。

  • 0表示密码验证失败时,自动锁定功能不生效。
  • 正数表示账户被锁定后,当锁定时间超过password_lock_time设定的值时,账户将会被自行解锁。
    说明:

    参数password_lock_time的整数部分表示天数,小数部分可以换算成时、分、秒。

1

failed_login_attempts

如果输入密码错误的次数达到failed_login_attempts则当前账户被锁定,password_lock_time秒后被自动解锁。

整型,0~1000

  • 0表示自动锁定功能不生效。
  • 正整数表示当错误密码次数达到failed_login_attempts设定的值时,当前账户将被锁定。

10

表2 特殊字符

编号

字符

编号

字符

编号

字符

编号

字符

1

~

9

*

17

|

25

<

2

10

(

18

[

26

.

3

@

11

)

19

{

27

>

4

#

12

-

20

}

28

/

5

$

13

_

21

]

29

6

%

14

=

22

-

-

7

^

15

+

23

-

-

8

&

16

\

24

-

-

自定义密码策略示例

示例一:配置密码复杂度参数password_policy。

  1. 登录GaussDB(DWS) 管理控制台。
  2. 在左侧导航栏中,单击“集群管理”。
  3. 在集群列表中找到所需要的集群,单击集群名称,进入“集群详情”页面。
  4. 单击“参数修改”页签,并在“参数列表”模块修改password_policy参数值,然后单击“保存”。password_policy参数无需进行重启集群操作,参数修改后立即生效。
图1 password_policy

示例二:配置密码有效期password_effect_time参数。

  1. 登录GaussDB(DWS) 管理控制台。
  2. 在左侧导航栏中,单击“集群管理”。
  3. 在集群列表中找到所需要的集群,单击集群名称,进入“集群详情”页面。
  4. 单击“参数修改”页签,并在“参数列表”模块修改password_effect_time参数值,然后单击“保存”。password_effect_time参数无需进行重启集群操作,参数修改后立即生效。
    图2 password_effect_time

密码设置和修改

  • 建议系统管理员和普通用户都要定期修改自己的账户密码,避免账户密码被非法窃取。

    以修改用户user1密码为例,使用管理员用户连接数据库并执行如下命令:

    1
    ALTER USER user1 IDENTIFIED BY 'newpassword' REPLACE 'oldpassword';
    

    密码要符合规则,否则会执行失败。

  • 管理员可以修改自己的或者其他账户的密码。通过修改其他账户的密码,解决用户密码遗失所造成无法登录的问题。

    以修改用户joe账户密码为例,命令格式如下:

    1
    ALTER USER joe IDENTIFIED BY 'password';
    
  • 系统管理员之间不允许互相修改对方密码。
  • 系统管理员可以修改普通用户密码且不需要用户原密码。
  • 系统管理员可以修改自己的密码但需要管理员原密码。
  • 密码验证

    设置当前会话的用户和角色时,需要验证密码。如果输入密码与用户的存储密码不一致,则会报错。

    以设置用户joe为例,命令格式如下:

    1
    SET ROLE joe PASSWORD 'password';
    

    显示如下命令表示设置成功:

    SET ROLE