news 2026/5/10 20:34:18

HighGoDB 用户密码安全策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HighGoDB 用户密码安全策略

文章目录

  • 环境
  • 文档用途
  • 详细信息

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.3.2

文档用途

通过调用函数的方式增强用户密码的安全性

详细信息

一般来说数据库密码安全管理要考虑以下几个方面 :

  1. 密码过期策略, 决定密码的有效期, 多长时间过期.

  2. 密码复用策略, 密码修改时需要对比以前的密码, 多少次以后才可以复用, 或者永不能使用与以前密码相同的密码.

  3. 密码长度策略, 密码的最小长度, 太短的话很容易被穷举法破解, 一般至少使用8位以上长度的密码.

  4. 密码复杂度策略, 密码包含的字符复杂度, 一般要求包含数字字母大小写以及特殊字符. 另外不要使用与数据库名, 用户名相似或一致的密码.

  5. 密码字典过滤, 过滤掉一些用户常用的或者有意义的字符, 也是为了避免密码很容易被穷举破解.

  6. 密码存储策略, 使用加密存储, 不要使用明文存储.

加密存储在创建用户时使用encrypted password即可.

如果设置了password_encryption=off, 同时创建用户时不加encrypted, 那么密码将以明文存储.

加密存储方法 :

highgo=# create role u1 login encrypted password 'highgo';CREATEROLE highgo=# select * from pg_shadow where usename='u1';usename|usesysid|usecreatedb|usesuper|userepl|usebypassrls|passwd|v aluntil|useconfig---------+----------+-------------+----------+---------+--------------+-------------------------------------+----------+-----------u1|131294|f|f|f|f|md50a0a7a2ef5607a4424f00e4903877f2e||(1row)
  1. 密码锁策略, 密码输入错误多少次后锁用户, 多长时间解锁.

HighgoDB不支持密码锁策略.

  1. 密码保护策略, 密码输入错误多少次后延迟认证. 可用来防止暴力破解.

目前HighgoDB在密码管理这块做得较弱, 以下举例通过函数来实现其中的部分安全策略 :

创建一个字典表, 用于存放已经使用过的密码的md5值, 以及用来进行暴力破解的密码字典的md5值.

highgo=# create table pwd_dictionary(pwd text unique);CREATETABLE

创建一个记录用户最后一次修改密码时间的表. 用于实施密码过期提醒策略.

highgo=# create table user_pwd(rolename name not null unique, pwd_modify_time timestamp not null);CREATETABLE

创建用户的函数 :

highgo=# create or replace function create_role(i_rolename name, i_pwd text) returns void as $$declarev_lengthint:=8;begin-- 密码长度策略iflength(i_pwd)<v_lengththenraise notice'password too short, please use password long than %.',v_length;return;endif;-- 密码复杂度策略, 包含数字, 字母大小写.ifnot(i_pwd~'[a-z]'andi_pwd~'[A-Z]'andi_pwd~'[0-9]')thenraise notice'password too simple, please ensure password contain a-z,A-Z and 0-9.';return;endif;-- 密码复用策略, 不允许重复使用已经存在的密码.-- 密码字典策略, 不允许使用密码字典中的密码.insertintopwd_dictionary(pwd)values(md5(i_pwd));-- 插入用户表, 记录用户最后一次修改密码的时间, 用于密码过期策略insertintouser_pwd(rolename,pwd_modify_time)values(i_rolename,now());-- 创建用户execute'create role '||i_rolename||' encrypted password '||quote_literal(i_pwd);raise notice'create role % successed.',i_rolename;return;end;$$languageplpgsql strict;CREATEFUNCTION创建用户密码过短,不允许创建.highgo=# select * from create_role('u4','pwd');NOTICE: password too short,pleaseusepassword long than8.create_role-------------(1row)

创建用户密码过于简单, 不允许创建.

highgo=# select * from create_role('u4','abcdefee');NOTICE: password toosimple,please ensure password contain a-z,A-Zand0-9.create_role-------------(1row)

创建用户正常.

highgo=# select * from create_role('u4','aA0ffffffff');NOTICE:createrole u4 successed.create_role-------------(1row)

创建用户密码与现有密码重复, 不允许创建.

highgo=# select * from create_role('new','aA0ffffffff');ERROR:duplicatekeyvalueviolatesuniqueconstraint"pwd_dictionary_pwd_key"DETAIL:Key(pwd)=(2b9aa88182d13d35930180b4cc791beb)alreadyexists.CONTEXT:SQLstatement"insert into pwd_dictionary(pwd) values (md5(i_pwd))"PL/pgSQLfunctioncreate_role(name,text)line17atSQLstatement

修改用户密码的函数 :

highgo=# create or replace function alter_role_pwd(i_rolename name, i_pwd text) returns void as $$declarev_lengthint:=8;begin-- 密码长度策略iflength(i_pwd)<v_lengththenraise notice'password too short, please use password long than %.',v_length;return;endif;-- 密码复杂度策略, 包含数字, 字母大小写.ifnot(i_pwd~'[a-z]'andi_pwd~'[A-Z]'andi_pwd~'[0-9]')thenraise notice'password too simple, please ensure password contain a-z,A-Z and 0-9.';return;endif;-- 密码复用策略, 不允许重复使用已经存在的密码.-- 密码字典策略, 不允许使用密码字典中的密码.insertintopwd_dictionary(pwd)values(md5(i_pwd));-- 更新用户表, 记录用户最后一次修改密码的时间, 用于密码过期策略updateuser_pwdsetpwd_modify_time=now()whererolename=i_rolename;-- 修改用户密码execute'alter role '||i_rolename||' encrypted password '||quote_literal(i_pwd);raise notice'modify role % password successed.',i_rolename;return;end;$$languageplpgsql strict;CREATEFUNCTION使用该函数修改用户密码 highgo=# select * from alter_role_pwd('u4','new');NOTICE: password too short,pleaseusepassword long than8.alter_role_pwd----------------(1row)highgo=# select * from alter_role_pwd('u4','new22222222');NOTICE: password toosimple,please ensure password contain a-z,A-Zand0-9.alter_role_pwd----------------(1row)highgo=# select * from alter_role_pwd('u4','new2222222z2');NOTICE: password toosimple,please ensure password contain a-z,A-Zand0-9.alter_role_pwd----------------(1row)highgo=# select * from alter_role_pwd('u4','new2222222z2A');NOTICE:modifyrole u4 password successed.alter_role_pwd----------------(1row)highgo=# select * from alter_role_pwd('u4','new2222222z2A');ERROR:duplicatekeyvalueviolatesuniqueconstraint"pwd_dictionary_pwd_key"DETAIL:Key(pwd)=(9a5c46207db775d4d98e64d427481cbc)alreadyexists.CONTEXT:SQLstatement"insert into pwd_dictionary(pwd) values (md5(i_pwd))"PL/pgSQLfunctionalter_role_pwd(name,text)line17atSQLstatement

密码过期提醒 :

因为密码最后一次修改时间已经更新到user_pwd表, 所以结合这个可以在系统crontab中或者nagios监控软件中实施密码过期提醒.

highgo=# select * from user_pwd ;rolename|pwd_modify_time----------+----------------------------u4|2013-05-2518:21:59.376404(1row)

[小结]

  1. 为了密码安全性, 在HighgoDB中, 创建用户请使用create_role函数, 不要直接使用create role 命令.

  2. 修改用户密码请使用alter_role_pwd函数. 不要直接使用alter role 命令.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 11:07:22

Substance P (1-9) ;RPKPQPFG

一、基础信息 英文名称&#xff1a;Substance P (1-9)三字母序列&#xff1a;Arg-Pro-Lys-Pro-Gln-Gln-Phe-Phe-Gly单字母序列&#xff1a;RPKPQPFG精确分子量&#xff1a;1104.28 Da等电点&#xff08;pI&#xff09;&#xff1a;6.2~6.7&#xff0c;弱酸性分子式&#xff1a…

作者头像 李华
网站建设 2026/5/2 17:42:44

深度测评 9个AI论文软件:研究生毕业论文与科研写作必备工具全解析

在当前科研任务日益繁重的背景下&#xff0c;研究生群体面临着论文写作、文献检索、格式规范等多重挑战。如何高效利用AI工具提升写作效率与质量&#xff0c;已成为学术研究中的关键课题。为了帮助用户更科学地选择适合自己的AI论文写作工具&#xff0c;本次测评基于2026年最新…

作者头像 李华
网站建设 2026/5/10 6:56:19

2026 AI营销专家甄选指南:为何原圈科技是实战派首选?

原圈科技作为AI营销专家领域的实战整合派代表&#xff0c;在多个维度下表现突出。其以客户业务增长为核心的价值收费模式、覆盖全链路的场景解决能力&#xff0c;以及经过超500家品牌验证的真实战果&#xff0c;使其被普遍视为2026年企业寻求可衡量价值增长时的理想合作伙伴&am…

作者头像 李华
网站建设 2026/4/30 15:58:03

用React Native开发OpenHarmony应用:Card卡片阴影效果

用React Native开发OpenHarmony应用&#xff1a;Card卡片阴影效果 摘要&#xff1a;本文深入探讨在OpenHarmony 6.0.0 (API 20)平台上使用React Native 0.72.5实现Card卡片阴影效果的技术方案。通过分析React Native与OpenHarmony的平台适配机制&#xff0c;详解阴影效果的实现…

作者头像 李华
网站建设 2026/5/9 6:15:23

AI营销内容失灵?2026榜单看原圈科技如何破局伪全球化

原圈科技凭借其在AI营销内容领域的卓越表现&#xff0c;被普遍视为2026年文化自适应解决方案的领导者。其“经纶系统”在多个维度下表现突出&#xff0c;通过先进的多智能体架构&#xff0c;深度融合市场洞察与品牌策略&#xff0c;为企业出海提供规模化且精准的创意内容&#…

作者头像 李华
网站建设 2026/5/1 8:26:59

2026 AI营销内容系统排名:原圈科技如何凭实力登顶榜单?

原圈科技的AI营销内容系统&#xff0c;被普遍视为高净值行业的领跑者。它在“三体模型”的多个维度下表现突出&#xff0c;通过多智能体协作&#xff0c;实现从全景洞察到全链路资产化管理&#xff0c;其强大的行业适配度和一体化作战能力是其被高度推荐的核心价值所在。 第一…

作者头像 李华