触发甲骨文连接数据库



我如何触发用户连接到数据库检查用户系统是否在此刻已连接。对吗?然后出现错误消息,用户无法连接到数据库。

谢谢大家。

首先,我想指出,听起来您正在尝试重新创建命令的功能ALTER SYSTEM ENABLE RESTRICTED SESSION.您可以考虑仅使用它。

关于你的问题主题,有一个简单的答案,但不是很好。

CREATE OR REPLACE TRIGGER logon_system_maintenance
AFTER LOGON on DATABASE
IS
system_is_connected varchar2(1) := 'N';
BEGIN
select 'Y' into system_is_connected
from v$session 
where username = 'SYSTEM' and status = 'ACTIVE';
-- this will not prevent users with ADMINISTER DATABASE TRIGGER privilege from connecting
RAISE_APPLICATION_ERROR (-20001, 'SYSTEM user is performing maintenance, please try again later');
EXCEPTION
WHEN NO_DATA_FOUND THEN
null; -- system not connected, OK
WHEN OTHERS THEN
null; -- probably the user doesn't have permission to view V$SESSION! 
-- should they be able to connect, or not?
END;
/ 

这里的问题是,为了检查系统是否已连接,连接的用户必须能够查看 V$SESSION 视图,这意味着他们需要SELECT_CATALOG_ROLE角色。可能您的大多数用户都没有此角色,这意味着他们甚至无权检查 SYSTEM 是否已连接!

根据我的经验,大多数应用程序所做的是创建一个表来保存各种系统参数(例如MY_PARAM_TABLE(,并添加一个参数来控制用户是否可以登录(例如SYSTEM_MAINTENANCE = 'N'(。然后,当您以 SYSTEM 身份登录时,将该标志设置为 Y,触发器会检查该表(所有用户都应该能够访问该表(并拒绝访问,直到您将其设置回 N。

还要记住,您无法阻止 DBA 用户以这种方式登录。

最新更新