更新时间:2025-08-30 GMT+08:00

自定义DWS密码策略

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

DWS默认密码策略

DWS默认进行密码复杂度校验,默认密码策略要求如下:

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

自定义密码策略

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

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

密码策略

对应参数名称

参数描述

参数取值范围

DWS默认值

是否进行密码复杂度检查

password_policy

创建或者修改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_effect_time参数

  1. 使用如下命令连接数据库。
    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=#
  2. 查看已配置的参数。
    1
    2
    3
    4
    5
    SHOW password_effect_time;
     password_effect_time
    ----------------------
     90
    (1 row)
    

    如果显示结果不为90,执行“\q”命令退出数据库。

  3. 执行如下命令设置成默认值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';
    

    密码要符合DWS默认密码策略,否则会执行失败。

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

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

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

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

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

    1
    SET ROLE joe PASSWORD 'password';
    

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

    SET ROLE