Sybase触发器查找已删除的查询

时间:2010-01-28 11:12:00

标签: sybase

在我的Sybase服务器中,表(TBL_RESOURCE)的某些行会以随机间隔从未知来源中删除。我尝试了很多,但我无法找到这些数据正在删除的源/文件/进程。有没有找到这个问题的机制?我需要找出谁正在删除这些行..

我们如何找出谁被删除以及从哪个文件中删除?

我们可以使用触发器来查找删除源吗?

3 个答案:

答案 0 :(得分:2)

好的,所以你没有存储过程或事务(这将允许正常的安全性:仅授予sprocs权限;不对用户的表进行直接更新)。因此,您可以直接向用户授予。这意味着他们可以从任何客户端程序插入/更新/删除,包括Excel。因此,很可能在应用程序的源代码中没有从表中删除的代码段。随机删除行是在线数据库的本质;保护它免受未经授权的删除是DBA的要求。

我认为你已经授予了特定人群的权限,而不是整个世界,而且你不确定究竟是谁在做这件事。最简单的是简单地询问小组。

下一个最简单的方法是打开该表的审核,或者允许的用户组(或角色)。但是,如果你没有设置审计,可能会造成障碍。

第三,触发器。

还有其他方法,但它们有很大的开销(22%),需要大量的实施工作,而且你将不得不涉及大量的数据。

如果您的环境听起来不安全且不稳定,并且该表不应该被删除,只需撤消该(一)表的权限,并等到有人告诉您,他们的权限已更改

“假设您没有以DBA或其他[特权]帐户登录的每个用户。”

这当然是一件非常愚蠢的事情,要求,恳求灾难。像向所有用户授予对所有表的删除一样愚蠢。我知道你来自哪里。

答案 1 :(得分:1)

这样的事情可以解决问题。

create trigger deltrig 
on TBL_RESOURCE 
for delete 
as 
   BEGIN   
        insert  TBL_LOG (modifiedBy, modifiedDate)    
        select  user_name(), getdate() from deleted  
      END   

(你必须明确创建日志表TBL_LOG)

答案 2 :(得分:0)

是的,你可以使用触发器。请参阅sybase doc以了解如何创建删除触发器。在触发器代码中,您可以选择将当前用户,用户ID等信息(插入)记录到一个表中进行审核。