首页 > 数据库 > 数据库开发技术 > PostgreSQL 17新特性之登录事件触发器
CREATE OR REPLACE FUNCTION login_validate()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
BEGIN
IF session_user <> 'postgres' and current_time not between '09:00:00' and '18:00:00' THEN
raise exception '非工作时间只允许超级用户postgres登录!';
END IF;
raise log '用户登录成功:%', session_user;
END;
$$;
CREATE EVENT TRIGGER login_validate
ON login
EXECUTE FUNCTION login_validate();
psql -U postgres -W -d testdb -X -c 'select 1'
?column?|
--------+
1|
2023-10-25 21:44:37.949 CST [8308] 日志: 用户登录:postgres
2023-10-25 21:44:37.949 CST [8308] 上下文: PL/pgSQL function login_validate() line 7 at RAISE
2023-10-25 21:44:37.949 CST [8308] 日志: duration: 0.200 ms statement: select 1
psql -U tony -d -W testdb -X -c 'select 1'
psql: error: connection TO server ON socket "/tmp/.s.PGSQL.5432" failed: FATAL: 非工作时间只允许超级用户postgres登录!
CONTEXT: PL/pgSQL FUNCTION login_validate() line 5 at RAISE
原文作者:SQL编程思想;如有侵权,请联系管理员删除。