【问题标题】:Sybase trigger to find the deleted querySybase 触发器查找已删除的查询
【发布时间】:2010-01-28 11:12:00
【问题描述】:

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

我们如何知道是谁删除了它以及从哪个文件中删除?

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

【问题讨论】:

    标签: sybase


    【解决方案1】:

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

    我认为您已将权限授予特定的人,而不是整个世界,并且您不确定到底是谁在做坏事。最简单的方法是简单地询问小组。

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

    第三,触发器。

    还有其他方法,但它们的开销很大 (22%),需要大量的实施工作,而且您必须处理大量数据。

    如果您的环境像听起来那样不安全和不稳定,并且不应该删除该表,只需撤销该(一个)表的权限,然后等到有人来找您说他们的权限已更改.

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

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

    【讨论】:

      【解决方案2】:

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

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

      (显然你必须创建日志表 TBL_LOG)

      【讨论】:

      • 这是假设您没有让每个用户都以 DBA 或其他帐户的身份登录。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多