【PostgreSQL实现psql连接时候提示用户的密码有效时间】

如下内容使用session_exec插件结合自定函数实现。类似于触发器的原理。
功能需要严格在测试环境测试后,才可在正式环境使用。没有相关要求,还是建议直接查询pg_roles/pg_authid/pg_user;

一、判断是否需要修改用户密码和有效期的检查SQL

首先是涉及到的判断是否需要修改密码和有效期的查询SQL,这里根据距离过期前7天为标准作为是否需要修改密码的提示。

select rolname as user,(rolvaliduntil - now()::timestamp(0)) as "can be used times" ,(rolvaliduntil - now()::timestamp(0)) < '7 day' as "Need change password and expiration date?" from pg_roles where rolvaliduntil is not null;

image.png

二、session_exec插件安装配置

session_exec的地址
https://github.com/okbob/session_exec 

unzip session_exec-master.zip
cd session_exec-master/
make pg_config=$PGHOME/bin/pg_config
make pg_config=$PGHOME/bin/pg_config install

更改配置文件

logging_collector = on 
log_destination = 'csvlog' 
session_preload_libraries='session_exec'##定义建立session连接时候触发的函数名
session_exec.login_name='login_xmaster'

更改完之后重启数据库

pg_ctl restart

三、结合自定义函数实现登陆时候的密码有效期提示

我这里写了两种,一种是只显示查看自己登陆的用户的有效期剩余时间,一种是一并显示数据库里所有的设置了有效期的用户的剩余可使用天数,以及打印出剩余时间小于七天甚至已经过期的用户。(其实直接查看pg_roles系统视图就可以,这里是为了直接在登陆的时候有一个提示)

函数需要在所有的数据库中创建,否则psql登陆会有如下的warning,但不影响使用。

pg13@ubuntu-linux-22-04-desktop:~/data$ psql -U test10 -d l1
WARNING:  function "login_xmaster()" does not exist
psql (13.11)
Type "help" for help.l1=>

1.只显示查看自己登陆的用户的有效期剩余时间

create or replace function public.login_xmaster() returns void as $$
declare
current_user_info varchar = null;
days varchar = null;
begin
select current_user into current_user_info;
select  (rolvaliduntil - now()::timestamp(0))  from pg_roles where rolname=current_user into days;
raise info 'current user is: %!  current password can be used: %!',current_user_info,days;
end;
$$ language plpgsql set search_path to 'public';//psql连接验证pg13@ubuntu-linux-22-04-desktop:~/data$ psql -U test10 -d postgres
INFO:  current user is: test10!  current password can be used: 178 days 20:45:17!
psql (13.11)
Type "help" for help.postgres=>

image.png

2.一并显示数据库里所有的设置了有效期的用户的剩余可使用天数,以及打印出剩余时间小于七天甚至已经过期的用户

create  function login2_xmaster() returns void AS
$$
DECLARE
v_rec  text[];
v_recfull text[];
BEGINCREATE TEMP TABLE temp_logtimes_tab  as (select rolname as user,(rolvaliduntil - now()::timestamp(0)) as "can be used times" ,(rolvaliduntil - now()::timestamp(0)) < '7 day' as "Need change password and expiration date?" from pg_roles where rolvaliduntil is not null);v_rec:=ARRAY(select temp_logtimes_tab.user::text From temp_logtimes_tab where "Need change password and expiration date?"='t' )::text;
v_recfull:=ARRAY(select row(temp_logtimes_tab.user::text,temp_logtimes_tab."can be used times"::text) From temp_logtimes_tab)::text;
raise info '------------------------------------------------------------------------------------------------------------';
raise notice 'list info: username, password can be used times';
raise info 'info: %! ',v_recfull;
raise info '------------------------------------------------------------------------------------------------------------';
raise notice 'The following users need to modify their passwords and expiration dates:';
raise info 'user: %! ',v_rec;END;
$$
LANGUAGE plpgsql;//psql连接验证pg13@ubuntu-linux-22-04-desktop:~/data$ psql -U test10 -d postgres
INFO:  ------------------------------------------------------------------------------------------------------------
NOTICE:  list info: username, password can be used times
INFO:  info: {"(test11,\"178 days 21:13:24\")","(test12,\"2 days 21:13:24\")","(test13,\"-1 days -02:46:36\")","(test10,\"178 days 21:13:24\")"}!
INFO:  ------------------------------------------------------------------------------------------------------------
NOTICE:  The following users need to modify their passwords and expiration dates:
INFO:  user: {test12,test13}!
psql (13.11)
Type "help" for help.postgres=>

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2806111.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计 | SSM 学生信息管理 教务管理系统(附源码)

1&#xff0c;绪论 随着我国高等教育的发展&#xff0c;数字化校园将成为一种必然的趋势&#xff0c;国内高校迫切需要提高教育工作的质量与效率&#xff0c;学生成绩管理工作是高校信息管理工作的重要组成部分&#xff0c;与国外高校不同&#xff0c;他们一般具有较大规模的稳…

基于java后台的微信影视交流点评小程序系统设计与实现

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

基于PostGIS的慢查询引起的空间索引提升实践

目录 前言 一、问题定位 1、前端接口定位 2、后台应用定位 3、找到问题所在 二、空间索引优化 1、数据库查询 2、创建空间索引 3、geography索引 4、再看前端响应 总结 前言 这是一个真实的案例&#xff0c;也是一个新入门的工程师很容易忽略的点。往往在设计数据库的…

论文阅读笔记——PathAFL:Path-Coverage Assisted Fuzzing

文章目录 前言PathAFL&#xff1a;Path-Coverage Assisted Fuzzing1、解决的问题和目标2、技术路线2.1、如何识别 h − p a t h h-path h−path&#xff1f;2.2、如何减少 h − p a t h h-path h−path的数量&#xff1f;2.3、哪些h-path将被添加到种子队列&#xff1f;2.4、种…

深度学习环境配置常见指令

首先打开anaconda prompt&#xff0c;激活对应虚拟环境。 导入torch并获取对应版本 import torch torch.__version__导入torchvision并获取对应版本 import torchvision torchvision.__version__ 检查cuda是否可用 torch.cuda.is_available() 获取CUDA设备数 torch.cuda.…

VS中使用xcopy生成后命令报9009错误

错误现象: download下来的代码&#xff0c;在另一台电脑能使用生成后命令xcopy&#xff0c;换一台电脑后该命令不能使用&#xff0c;报如下错误&#xff1a; 2.错误原因&#xff1a; 这是因为xcopy /Y 为Windows程序命令&#xff0c;xcopy其实是Windows下的一个xcopy.exe,如果…

前后端分离Vue+ElementUI+nodejs蛋糕甜品商城购物网站95m4l

本文主要介绍了一种基于windows平台实现的蛋糕购物商城网站。该系统为用户找到蛋糕购物商城网站提供了更安全、更高效、更便捷的途径。本系统有二个角色&#xff1a;管理员和用户&#xff0c;要求具备以下功能&#xff1a; &#xff08;1&#xff09;用户可以修改个人信息&…

NXP实战笔记(十):S32K3xx基于RTD-SDK在S32DS上配置CAN通信

目录 1、概述 2、SDK配置 2.1、配置目标 2.2、CAN配置 3、代码实现 4、测试结果 1、概述 S32K3xx的FlexCan与之前的S32K1xx很相似,Can的中断掩码寄存器(IMASK3)与中断标志位寄存器(IFLAG3)依赖于邮箱数。 FlexCan配置实例如下 FlexCan的整体图示如下 Protocol Engine…

LeetCode二叉树中的第 K 大层和

题目描述 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k 大的层和&#xff08;不一定不同&#xff09;。如果树少于 k 层&#xff0c;则返回 -1 。 注意&#xff0c;如果两个节点与根节点的距离相同&#xff0c;则…

Node.js+vue校内二手物品交易系统tdv06-vscode前后端分离

二手物品交易系统采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了vue框架。该系统从三个对象&#xff1a;由管理员和用户、店铺来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户、店铺、二…

uniapp 使用 z-paging组件

使用 z-paging 导入插件 获取插件进行导入 自定义上拉加载样式和下拉加载样式 页面结构 例子 搭建页面 <template><view class"content"><z-paging ref"paging" v-model"dataList" query"queryList"><templ…

【Java】输入输出流(实验八)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、掌握java I/O的基本原理。 2、掌握标准输入输出流和Scanner类的基本使用方法。 3、掌握FileInputStream、FileOutStream、FileReader、FileWriter、BufferedReader 、BufferedWriter类的常用方法。 二、实验…

从源码学习单例模式

单例模式 单例模式是一种设计模式&#xff0c;常用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。这意味着无论在程序的哪个地方&#xff0c;只能创建一个该类的实例&#xff0c;而不会出现多个相同实例的情况。 在单例模式中&#xff0c;常用的实现方式包括懒汉…

创建一个基于Node.js的实时聊天应用

在当今数字化社会&#xff0c;实时通讯已成为人们生活中不可或缺的一部分。无论是在社交媒体平台上与朋友交流&#xff0c;还是在工作场合中与同事协作&#xff0c;实时聊天应用都扮演着重要角色。与此同时&#xff0c;Node.js作为一种流行的后端技术&#xff0c;为开发者提供了…

Linux修改shell工具连接端口

nano /etc/ssh/sshd_config 或者 vi /etc/ssh/sshd_config 或者 vim /etc/ssh/sshd_config

2024最新版(黑客技术)零基础入门自学网络安全

一、自学网络安全学习的误区和陷阱 1.不要试图先以编程为基础的学习再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到的关键知识并不…

如何连接ACL认证的Redis

点击上方蓝字关注我 应用程序连接开启了ACL认证的Redis时与原先的方式有差别&#xff0c;本文介绍几种连接开启ACL认证的Redis的Redis的方法。 对于RedisACL认证相关内容&#xff0c;可以参考历史文章&#xff1a; Redis权限管理体系(一&#xff09;&#xff1a;客户端名及用户…

AIGC 实战:Ollama 和 Hugging Face 是什么关系?

Ollama和 Hugging Face 之间存在着双重关系&#xff1a; 1. Ollama是 Hugging Face 开发并托管的工具&#xff1a; Ollama是一个由 Hugging Face 自行开发的开源项目。它主要用于在本地运行大型语言模型 (LLM)&#xff0c;特别是存储在 GPT 生成的统一格式 (GPT-Generated Un…

【Java程序设计】【C00296】基于Springboot的4S车辆管理系统(有论文)

基于Springboot的4S车辆管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的4S店车辆管理系统 本系统分为销售员功能模块、管理员功能模块以及维修员功能模块。 管理员功能模块&#xff1a;管理员登录进入4S…

招聘APP开发实践:技术选型、架构设计与开发流程

时下&#xff0c;招聘APP成为了企业和求职者之间连接的重要纽带。本文将深入探讨招聘APP的开发实践&#xff0c;重点关注技术选型、架构设计以及开发流程等关键方面&#xff0c;带领读者走进这一充满挑战与机遇的领域。 一、技术选型 在开始招聘APP的开发之前&#xff0c;首…