当前位置:   article > 正文

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

【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 

  1. unzip session_exec-master.zip
  2. cd session_exec-master/
  3. make pg_config=$PGHOME/bin/pg_config
  4. make pg_config=$PGHOME/bin/pg_config install

更改配置文件

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

更改完之后重启数据库

pg_ctl restart

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

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

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

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

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

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

image.png

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

  1. create function login2_xmaster() returns void AS
  2. $$
  3. DECLARE
  4. v_rec text[];
  5. v_recfull text[];
  6. BEGIN
  7. CREATE 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);
  8. v_rec:=ARRAY(select temp_logtimes_tab.user::text From temp_logtimes_tab where "Need change password and expiration date?"='t' )::text;
  9. v_recfull:=ARRAY(select row(temp_logtimes_tab.user::text,temp_logtimes_tab."can be used times"::text) From temp_logtimes_tab)::text;
  10. raise info '------------------------------------------------------------------------------------------------------------';
  11. raise notice 'list info: username, password can be used times';
  12. raise info 'info: %! ',v_recfull;
  13. raise info '------------------------------------------------------------------------------------------------------------';
  14. raise notice 'The following users need to modify their passwords and expiration dates:';
  15. raise info 'user: %! ',v_rec;
  16. END;
  17. $$
  18. LANGUAGE plpgsql;
  19. //psql连接验证
  20. pg13@ubuntu-linux-22-04-desktop:~/data$ psql -U test10 -d postgres
  21. INFO: ------------------------------------------------------------------------------------------------------------
  22. NOTICE: list info: username, password can be used times
  23. 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\")"}!
  24. INFO: ------------------------------------------------------------------------------------------------------------
  25. NOTICE: The following users need to modify their passwords and expiration dates:
  26. INFO: user: {test12,test13}!
  27. psql (13.11)
  28. Type "help" for help.
  29. postgres=>

image.png

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号