news 2026/5/1 8:35:55

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 6:02:15

sql语言之新建表与删除表

sql新建表的语法是 create table 表名 { 列名 数据类型&#xff0c; 列名 数据类型 } 比如新建一个新表&#xff0c;名为学生表&#xff0c;表中有id,姓名&#xff0c;年龄&#xff0c;联系方式等列名 代码如下 CREATE TABLE "学生表"( id integer primary …

作者头像 李华
网站建设 2026/4/24 8:12:37

设置Fcitx5

开机自启动 特定发行版中的工具 特定的发行版可能会提供一些用于自动启动 Fcitx 的工具&#xff0c;并且这些工具通常也会设置环境变量。 im-config (Debian/Debian-based/Ubuntu) 这是一个用于 Debian 和 Debian-based 发行版的工具。在登录到 GUI 之后&#xff0c;从命令…

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

酒店涉外入住登记,高效合规两不误

根据出入境管理相关规定&#xff0c;酒店接待外籍宾客必须登记护照信息并实时上传公安系统。传统手动录入不仅效率低&#xff0c;还易因信息错误面临处罚。护照阅读器可直接对接酒店PMS系统与公安联网平台&#xff0c;扫描护照后自动提取姓名、国籍、签证等信息&#xff0c;加密…

作者头像 李华
网站建设 2026/4/30 18:50:56

基于HTML5的小众纪录片网站设计开题报告

目录 HTML5技术背景小众纪录片市场定位网站核心功能设计技术实现路径创新点与挑战预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 HTML5技术背景 HTML5作为现代网页开发的核心技术&#xff0c;提…

作者头像 李华
网站建设 2026/4/18 12:24:16

基于ssm框架的网上书店系统的设计与实现开题报告

目录 研究背景与意义系统目标技术选型功能模块设计创新点与难点预期成果参考文献 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 研究背景与意义 随着电子商务的快速发展&#xff0c;网上书店成为传统实…

作者头像 李华