当前位置: 首页 > news >正文

PostgreSQL 数据库 设置90天密码过期时间的完整方案

PostgreSQL 数据库 设置90天密码过期时间的完整方案

  • PostgreSQL 数据库 设置90天密码过期时间的完整方案
    • 一、基础密码过期设置方法
    • 二、高级密码策略组合
    • 三、自动化管理方案
    • 四、注意事项

PostgreSQL 数据库 设置90天密码过期时间的完整方案

一、基础密码过期设置方法

  1. 使用ALTER ROLE命令设置密码有效期

    -- 设置90天后过期
    ALTER ROLE username VALID UNTIL (CURRENT_TIMESTAMP + INTERVAL '90 days');-- 检查设置结果
    SELECT rolname, rolvaliduntil FROM pg_roles WHERE rolname = 'username';
    
  2. 批量设置所有用户密码过期时间

    -- 为所有非系统用户设置90天有效期
    DO $$
    DECLAREr RECORD;
    BEGINFOR r IN SELECT rolname FROM pg_roles WHERE rolname NOT LIKE 'pg_%'LOOPEXECUTE format('ALTER ROLE %I VALID UNTIL %L', r.rolname, CURRENT_TIMESTAMP + INTERVAL '90 days');END LOOP;
    END $$;
    

二、高级密码策略组合

  1. 密码复杂度要求(建议与过期策略配合使用):

    -- 启用passwordcheck扩展
    CREATE EXTENSION IF NOT EXISTS passwordcheck;-- 配置密码策略(需在postgresql.conf中设置)
    passwordcheck.min_length = 12
    passwordcheck.mixed_case = on
    passwordcheck.require_digit = on
    passwordcheck.password_condition_punct = 1
    
  2. 密码历史记录(防止重复使用旧密码):

    -- 创建密码历史表
    CREATE TABLE password_history (username text,password_hash text,change_time timestamp
    );-- 创建触发器函数
    CREATE OR REPLACE FUNCTION record_password_change()
    RETURNS event_trigger AS $$
    BEGININSERT INTO password_historyVALUES (current_user, md5(current_setting('password')), now());
    END;
    $$ LANGUAGE plpgsql;
    

三、自动化管理方案

  1. 创建定期检查脚本(可设置为cron任务):

    #!/bin/bash
    # 检查即将过期的密码(提前7天提醒)
    psql -U postgres -c "SELECT rolname, rolvaliduntil FROM pg_roles WHERE rolvaliduntil BETWEEN NOW() AND NOW() + INTERVAL '7 days';"
    
  2. 密码到期自动锁定功能

    CREATE OR REPLACE FUNCTION lock_expired_accounts()
    RETURNS void AS $$
    BEGINUPDATE pg_authid SET rolpassword = NULL, rolvaliduntil = NULL WHERE rolvaliduntil < CURRENT_TIMESTAMP;
    END;
    $$ LANGUAGE plpgsql;
    

四、注意事项

  1. 系统账户排除:不应为postgres等系统账户设置密码过期
  2. 应用账户处理:服务账户可能需要特殊处理或设置为永不过期
  3. 时区问题:确保数据库服务器时区设置正确,避免过期时间计算错误
  4. 备份策略:修改重要账户密码前确保有备份恢复方案
  5. 多节点同步:主从架构中需确保所有节点策略一致
http://www.dtcms.com/a/319682.html

相关文章:

  • 读取了错误数据导致STM32 单片机Hard Fault
  • 智能升级革命:Deepoc具身模型开发板如何让传统除草机器人拥有“认知大脑”
  • 分布式微服务--GateWay(过滤器及使用Gateway注意点)
  • 翻译模型(TM):基于短语的统计翻译模型(PBSMT)的构建
  • C++语法与面向对象特性(2)
  • PyTorch如何实现婴儿哭声检测和识别
  • 目标检测数据集 - 自动驾驶场景道路异常检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 接口自动化-pytest
  • OpenAI 开源模型 gpt-oss 正式上线微软 Foundry 平台
  • 网络可视,运维无忧:分钟级定位,告别盲目扩容
  • 从零开始构建情绪可视化日记平台 - React + TypeScript + Vite
  • CPTS Remote 复现
  • Redisson中的分布式锁
  • 自动化办公革命:3小时完成8小时工作量
  • 钢卷矫平机科普:把“弯曲的记忆”清零
  • 人工智能与能源:AI 驱动的能源产业变革
  • MCU-基于TC397的双BootLoader设计方案
  • 关于vue2中对接海康摄像头以及直播流rtsp或rtmp,后台ffmpeg转码后通过ws实现
  • 【linux】vmware中ubuntu无法上网
  • 关于 cadence导入原理图出现ERROR(ORCAP-1192)错误 的解决方法
  • 蓝桥杯算法之搜索章 - 3
  • HarmonyOS分布式开发实战:打造跨设备协同应用
  • C 语言主控开发与显控开发能力体系及技术栈详解,STM32、QT、嵌入式、边缘系统显示
  • 【Vite】Vite 构建 React 项目中 Select a variant 配置选择指南:标准版 vs SWC
  • shell脚本while只循环一次,后续循环失效
  • 解码算法:维特比算法(Viterbi)在SMT中的应用
  • 开发避坑指南(20) :MyBatis操作Oracle插入NULL值异常“无效列类型1111“解决方案
  • 金仓KingbaseES逻辑架构,与Oracle/MySQL对比
  • Windows Oracle 11 g dmp数据库恢复笔记
  • 一种基于CEEMDAN-小波阈值联合降噪-快速谱峭度(FSK)/基尼谱Ginigram/Autogram的故障诊断 Matlab