网站建设有哪些知识点,图片制作软件哪个好用,手机移动开发网站,太原网站优化哪家专业PostgreSQL 9.3 就提供了事件触发器功能#xff0c;可以基于 DDL 语句触发相应的操作。
正在开发中的 PostgreSQL 17 增加了基于登录事件的触发器#xff0c;可以在用户登录时执行某些检查或者特定操作。登录事件触发器的使用方法和其他触发器一样#xff1a;创建一个返回 …PostgreSQL 9.3 就提供了事件触发器功能可以基于 DDL 语句触发相应的操作。
正在开发中的 PostgreSQL 17 增加了基于登录事件的触发器可以在用户登录时执行某些检查或者特定操作。登录事件触发器的使用方法和其他触发器一样创建一个返回 event_trigger 的函数然后基于 login 事件创建一个事件触发器。
例如以下函数返回了一个 event_trigger 对象
CREATE OR REPLACE FUNCTION login_validate()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
BEGINIF session_user postgres and current_time not between 09:00:00 and 18:00:00 THENraise exception 非工作时间只允许超级用户postgres登录;END IF;raise log 用户登录成功%, session_user;
END;
$$;然后创建一个登录事件触发器
CREATE EVENT TRIGGER login_validateON loginEXECUTE FUNCTION login_validate();使用 postgres 用户可以正常登录
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同时日志文件也会打印类似信息。 除了禁止登录之外我们也可以记录所有用户登录信息用于审计。 为了避免数据库没有登录触发器时不必要的时间消耗同时增加了一个 pg_database.dathasloginevt 标识记录数据库是否存在有效的登录触发器。当我们执行 CREATE/ALTER EVENT TRIGGER 语句时会设置这个标识连接时如果没有发现有效的登录触发器就取消设置。