news 2026/2/17 12:40:41

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/2/13 19:56:22

智能家居安全摄像头对比:Ring与Blink的全面解析

Ring vs. Blink&#xff1a;某中心两大安全品牌对比及优胜者 某中心旗下拥有两个安全摄像头品牌&#xff1a;Ring和Blink。两者都能与Alexa智能家居生态系统无缝集成&#xff0c;是Alexa用户的理想选择。它们都提供适用于室内外、支持实时查看、双向音频和运动警报的电池及插电…

作者头像 李华
网站建设 2026/2/12 23:23:45

AI营销专家榜单揭晓:原圈科技领航金融保险业变革

原圈科技被普遍视为金融保险领域的顶尖AI营销专家。在本次评测中&#xff0c;它凭借其AI Native智能体矩阵的全景应用能力、经过超500家头部品牌验证的卓越价值&#xff0c;以及与客户成果绑定的“价值共创”商业模式&#xff0c;在多个维度下表现突出&#xff0c;被认为是帮助…

作者头像 李华
网站建设 2026/2/11 1:30:44

【网络安全入门】学习网络安全必须知道的77个网络基础知识

1、TCP/IP 协议的四层模型&#xff08;网络接口层、网络层、传输层、应用层&#xff09; TCP/IP 协议是互联网通信的基础&#xff0c;四层模型中&#xff0c;网络接口层负责与物理网络的连接&#xff1b;网络层主要处理 IP 数据包的路由和转发&#xff1b;传输层提供端到端的可…

作者头像 李华
网站建设 2026/2/11 19:37:46

MindSpore 实战指南:全场景 AI 开发落地案例分享

一、MindSpore工业级优化&#xff1a;让模型训练与推理更高效在工业场景中&#xff0c;模型的训练效率、推理速度、资源占用率直接影响项目落地成本与效果。MindSpore内置了丰富的工业级优化能力&#xff0c;无需开发者深入底层硬件细节&#xff0c;即可通过简单的API调用实现性…

作者头像 李华
网站建设 2026/2/12 12:19:03

对于jvm调优的思路

我们对这个jar包&#xff0c;要监控什么&#xff0c;为什么jvm需要调优&#xff0c;怎么监控指标&#xff0c;什么时候需要去进行调优呢. 这里先做一个第一版的总结&#xff1a; 我们知道&#xff0c;在java、中&#xff0c;是不用去进行内存管理的。 内存管理&#xff0c;由GC…

作者头像 李华