news 2026/5/5 1:55:07

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/1 16:31:31

鸿蒙应用开发:项目实战与经验总结

&#x1f3af; 鸿蒙应用开发&#xff1a;项目实战与经验总结 一、章节概述 ✅ 学习目标 详细介绍鸿蒙应用开发的项目实战流程&#xff08;项目准备、需求分析、系统设计、代码实现、调试与测试、打包与发布&#xff09;提供多个实战项目案例&#xff08;智能待办应用、天气…

作者头像 李华
网站建设 2026/5/3 7:05:56

写了一套几乎无敌的参数校验组件!!!

参数校验这个东西&#xff0c;很多情况下都是比较简单的&#xff0c;用 NotNull、Size 等注解就可以解决绝大多数场景&#xff0c;但也有一些场景是这些基本注解解决不了的&#xff0c;只能用一些其他的方式处理&#xff0c;这样就导致参数校验变成了多层&#xff0c;其实是不利…

作者头像 李华
网站建设 2026/5/3 1:52:13

纺织设备远程监控运维管理平台方案

在纺织行业蓬勃发展的今天&#xff0c;纺织机械作为生产线的核心装备&#xff0c;其稳定运行直接关系到生产效率和产品质量。然而&#xff0c;随着纺织企业规模的扩大和设备的多样化&#xff0c;传统运维方式已难以满足现代纺织生产的需求。该平台通过高度兼容的技术架构&#…

作者头像 李华
网站建设 2026/5/2 20:30:51

DeepSeek-R1一周年回顾与MODEL1新模型技术前瞻

文章回顾了DeepSeek-R1发布一周年的意义&#xff0c;并分析了代码库中出现的MODEL1可能代表的新一代推理模型(R2或全新产品线)。文章探讨了R1如何通过开源策略改变AI推理生态&#xff0c;使模型从"黑箱"变为"白盒"&#xff0c;从结果导向转向过程导向。MOD…

作者头像 李华
网站建设 2026/5/4 8:58:19

<span class=“js_title_inner“>智筑安全防线慧享畅行民生——公安交管部门以科技创新书写新时代答卷</span>

从云端的数据之眼到路面的智慧之治&#xff0c;从指尖的便民服务到城市交通的“绿波”畅行&#xff0c;科技的力量正以前所未有的深度和广度&#xff0c;重塑着道路交通管理的方方面面。近年来&#xff0c;全国公安交通管理部门坚持以人民为中心的发展思想&#xff0c;深入实施…

作者头像 李华