设置密码安全策略
加密存储密码
用户密码存储在系统表PG_AUTHID中,为防止用户密码泄露,Vastbase对用户密码进行加密存储,所采用的加密算法由配置参数password_encryption_type决定。
- 当参数设置为0时,表示采用md5方式对密码加密。MD5加密算法安全性低,存在安全风险,不建议使用。
- 当参数设置为1时,表示采用sha256和md5方式对密码加密。MD5加密算法安全性低,存在安全风险,不建议使用。
- 当参数设置为2时,表示采用sha256方式对密码加密,为默认配置。
- 当参数设置为3时,表示采用SM3方式对密码加密。
示例:采用sha256和md5方式对密码加密。
1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。
2、使用如下命令连接数据库,其中vastbase为需要连接的数据库名称,5432为数据库主节点的端口号。
vsql -d vastbase -p 5432
3、查看已配置的加密算法。
SHOW password_encryption_type;
返回结果如下:
password_encryption_type
--------------------------
2
(1 row)
如果显示结果为0或1,执行\q
命令退出数据库。
4、执行如下命令将其设置为安全的加密算法:采用sha256和md5方式对密码加密。
vb_guc reload -D $PGDATA -c "password_encryption_type=2"
为防止用户密码泄露,在执行CREATE USER或者CREATE ROLE命令创建数据库用户时,不能指定UNENCRYPTED属性,即新创建的用户的密码只能是加密存储的。
密码复杂度
初始化数据库、创建用户、修改用户时需要指定密码。密码必须要符合复杂度(password_policy)的要求,否则会提示用户重新输入密码。
- 参数password_policy设置为1时启用密码复杂度校验,且密码需满足四类字符中的三类以上,默认值。
- 参数password_policy设置为2时启用密码复杂度校验,且密码需满足四类字符中的四类。
参数password_policy设置为0时表示不采用密码复杂度校验,但需满足密码不能为空并且只包含有效字符,有效字符范围为大写字母(A-Z)、小写字母(a-z)、数字(0-9)及特殊字符详见表1。
设置为0会存在安全风险,不建议设置为0,即使需要设置也要将所有Vastbase节点中的password_policy都设置为0才能生效。
示例:启用密码复杂度校验。
1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。
2、使用如下命令连接数据库,其中vastbase为需要连接的数据库名称,5432为数据库主节点的端口号。
vsql -d vastbase -p 5432
3、查看已配置的参数。
SHOW password_policy;
返回结果如下:
password_policy
---------------------
1
(1 row)
如果显示结果不为1,执行\q
命令退出数据库。
4、执行如下命令设置成默认值1。
vb_guc reload -D $PGDATA -c "password_policy=1"
帐户密码的复杂度要求如下:
- 包含大写字母(A-Z)的最少个数(password_min_uppercase)。
- 包含小写字母(a-z)的最少个数(password_min_lowercase)。
- 包含数字(0-9)的最少个数(password_min_digital)。
- 包含特殊字符的最少个数(password_min_special)(特殊字符的列表请参见表1)。
- 密码的最小长度(password_min_length)。
- 密码的最大长度(password_max_length)。
- 至少包含上述四类字符中的三类。
- 不能和用户名、用户名倒写相同,本要求为非大小写敏感。
- 不能和当前密码、当前密码的倒写相同。
不能是弱口令。
- 弱口令指的是强度较低,容易被破解的密码,对于不同的用户或群体,弱口令的定义可能会有所区别,用户需自己添加定制化的弱口令。
- 弱口令字典中的口令存放在GS_GLOBAL_CONFIG系统表中,当创建用户、修改用户需要设置密码时,系统将会把用户设置口令和弱口令字典中存放的口令进行对比,如果符合,则会提示用户该口令为弱口令,设置密码失败。
弱口令字典默认为空,用户通过以下语法可以对弱口令字典进行增加和删除,示例如下:
CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password1'), ('password2'); DROP WEAK PASSWORD DICTIONARY;
密码重用
用户修改密码时,只有超过不可重用天数(password_reuse_time)或不可重用次数(password_reuse_max)的密码才可以使用。参数配置说明如表2所示。
不可重用天数默认值为90天,不可重用次数默认值是3。这两个参数值越大越安全,但是在使用过程中会带来不便,其默认值符合安全标准,用户可以根据需要重新设置参数,提高安全等级。
示例: 配置password_reuse_time参数。
1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。
2、使用如下命令连接数据库,其中vastbase为需要连接的数据库名称,5432为数据库主节点的端口号。
vsql -d vastbase -p 5432
3、查看已配置的参数。
SHOW password_reuse_time;
返回结果为:
password_reuse_time
---------------------
90
(1 row)
如果显示结果不为90,执行\q
命令退出数据库。
4、执行如下命令设置成默认值90。
vb_guc reload -D $PGDATA -c "password_reuse_time=90"
示例:配置password_reuse_max参数。
1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。
2、使用如下命令连接数据库,其中vastbase为需要连接的数据库名称,5432为数据库主节点的端口号。
vsql -d vastbase -p 5432
3、查看已配置的参数。
SHOW password_reuse_max;
返回结果为:
password_reuse_max
--------------------
3
(1 row)
如果显示结果不为3,执行\q
命令退出数据库。
4、执行如下命令设置成默认值3。
vb_guc reload -D $PGDATA -c "password_reuse_max = 3";
密码有效期限
数据库用户的密码都有密码有效期(password_effect_time),当达到密码到期提醒天数(password_notify_time)时,系统会在用户登录数据库时提示用户修改密码。(密码有效期到期后,只有普通用户会收到提示。)
示例:配置password_effect_time参数。
1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。
2、使用如下命令连接数据库,其中vastbase为需要连接的数据库名称,5432为数据库主节点的端口号。
vsql -d vastbase -p 5432
3、查看已配置的参数。
SHOW password_effect_time;
返回结果为:
password_effect_time
----------------------
90
(1 row)
如果显示结果不为90,执行\q
命令退出数据库。
4、执行如下命令设置成默认值90(不建议设置为0)。
vb_guc reload -D $PGDATA -c "password_effect_time = 90"
示例:配置password_notify_time参数。
1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。
2、使用如下命令连接数据库,其中vastbase为需要连接的数据库名称,5432为数据库主节点的端口号。
vsql -d vastbase -p 5432
3、查看已配置的参数。
SHOW password_notify_time;
返回结果为:
password_notify_time
----------------------
7
(1 row)
如果显示结果不为7,执行\q
命令退出数据库。
4、执行如下命令设置成默认值7(不建议设置为0)。
vb_guc reload -D $PGDATA -c "password_notify_time = 7"
密码修改
在安装数据库时,会新建一个和初始化用户重名的操作系统用户,为了保证帐户安全,请定期修改操作系统用户的密码。
以修改用户user1密码为例,命令格式如下:
passwd user1
建议系统管理员和普通用户都要定期修改自己的帐户密码,避免帐户密码被非法窃取。
示例:修改用户user1的密码。
1、以系统管理员用户连接数据库并执行如下命令:
ALTER USER user1 IDENTIFIED BY "1234@abc" REPLACE "5678@def";
1234@abc、5678@def分别代表用户user1的新密码和原始密码,这些密码要符合规则(参见密码复杂度),否则会执行失败。
管理员可以修改自己的或者其他帐户的密码。通过修改其他帐户的密码,解决用户密码遗失所造成无法登录的问题。 以修改用户joe帐户密码为例,命令格式如下:
ALTER USER joe IDENTIFIED BY "abc@1234";
- 系统管理员之间不允许互相修改对方密码。
- 系统管理员可以修改普通用户密码且不需要用户原密码。
- 系统管理员修改自己密码但需要管理员原密码。
密码验证
设置当前会话的用户和角色时,需要验证密码。如果输入密码与用户的存储密码不一致,则会报错。
以设置用户joe为例,验证过程如下:
SET ROLE joe PASSWORD "Vastbase@123";
返回结果为:
ERROR: Invalid username/password,set role denied.
表 1 特殊字符
表 2 不可重用天数和不可重用次数参数说明
不可重用天数(password_reuse_time) |
|
|
不可重用次数(password_reuse_max) |
|
设置用户密码失效
具有CREATEROLE权限的用户在创建用户时可以强制用户密码失效,新用户首次登陆数据库后需要修改密码才允许执行其他查询操作,命令格式如下:
CREATE USER joe PASSWORD "abc@1234" EXPIRED;
具有CREATEROLE权限的用户可以强制用户密码失效或者强制修改密码且失效,命令格式如下:
ALTER USER joe PASSWORD EXPIRED;
或者:
ALTER USER joe PASSWORD "abc@2345" EXPIRED;
密码失效的用户登录数据库后,当执行简单查询或者扩展查询时,会提示用户修改密码。修改密码后可以正常执行语句。
只有初始用户、系统管理员(sysadmin)或拥有创建用户(CREATEROLE)权限的用户才可以设置用户密码失效,其中系统管理员也可以设置自己或其他系统管理员密码失效。不允许设置初始用户密码失效。