Postgresql限制用户登录错误次数的实例代码( 二 )


raise notice ‘Account % is locked!’,res;
end loop;
end;
$$ language plpgsql strict;
4、编辑postgresql.conf文件,配置登录函数
session_preload_libraries=’session_exec’
session_exec.login_name=’lock_user’
 
5、测试
模拟test1用户登录错误超过3次:
bill=# select * from t_login;
     login_time     | user_name | flag
—————————-+———–+——
 2020-08-26 07:26:45.42+08 | test1   |  1
 2020-08-26 07:26:50.179+08 | test1   |  1
 2020-08-26 07:26:52.487+08 | test1   |  1
 2020-08-26 07:26:54.537+08 | test1   |  1
(4 rows)
 
当我们在使用test1用户登录时则无法连接
-> psql bill test1
Password for user test1:
NOTICE: c1 = <NULL>
psql: error: could not connect to server: FATAL: terminating connection due to administrator command
CONTEXT: SQL statement “select pg_terminate_backend(pid) from pg_stat_activity where usename=$1”
PL/pgSQL function lock_user() line 13 at EXECUTE
再次登录可以看到提示该用户被锁定:
-> psql bill test1
Password for user test1:
psql: error: could not connect to server: FATAL: role “test1” is not permitted to log in
 
6、解锁用户
此时想要解锁该用户则需要执行:
bill=# alter user test1 login;
ALTER ROLE
然后需要注意还要将t_login中过期的数据修改 。
bill=# update t_login set flag = 0;
UPDATE 4
文章来源:脚本之家
来源地址:https://www.jb51.net/article/208018.htm
申请创业报道,分享创业好点子 。,共同探讨创业新机遇!