我想创建一个登录触发器。触发器将执行以下操作:
它将根据某些用户和某些机器信息阻止对数据库的访问。然后它会给用户一个信息消息,并将这个会话信息插入到一个表中。
例如;
用户: mike, john, eric, daisy, albert
机器: NEWMACH%
给用户的消息:您不能从机器 '||MACHINE|| 登录 '使用'|| 用户名
它将插入到表中的信息:用户名、osuser、机器、端口、终端、程序、模块、instance_id、sid、serial#
表名: DBADMINISTRATOR.LOGON_TBL
我有一个触发想法如下;
CREATE OR REPLACE TRIGGER DBADMINISTRATOR.LOGON_FILTER
AFTER LOGON
ON DATABASE
DECLARE
USERNAME varchar2 (200);
MACHINE varchar2 (200);
begin
...
...
if
...
then
raise_application_error(-20001,'You are not allowed to logon from machine '||MACHINE|| ' using '|| USERNAME);
end if;
end;
/
你能帮忙编写脚本吗?它会导致任何性能问题吗?
此致,
这将很快成为维护的噩梦。如果您老板今天早上拿到的新笔记本电脑需要为 5 分钟后开始的会议运行数据库报告,但您还没有时间更新白名单,会发生什么?此外,如果用户知道自己在做什么,您可以检查的所有系统信息都可能被用户欺骗,因此对于增强安全性并没有太大作用。
如果您想限制访问,请使用操作系统防火墙或 Oracle 连接管理器(如果您有企业版)将客户端限制到特定的网络子网(绝不是单独的 IP 地址)。否则,使用角色、配置文件和权限控制用户可以在数据库中执行的操作。您始终可以控制用户连接后可以执行的操作;限制它们的连接方式要困难得多。
如果您需要更多详细信息,我在去年发布了几篇关于这类事情的博客文章,这里的灵感来自 Stack Exchange 论坛上的先前帖子:
也可以看看: