【发布时间】:2010-01-28 11:12:00
【问题描述】:
在我的 Sybase 服务器中,表 (TBL_RESOURCE) 中的某些行正在以随机间隔从未知来源中删除。我尝试了很多,但我无法找到正在删除该数据的源/文件/进程。有什么机制可以定位这个问题吗?我需要找出是谁在删除这些行。
我们如何知道是谁删除了它以及从哪个文件中删除?
我们可以使用触发器找到删除的来源吗?
【问题讨论】:
标签: sybase
在我的 Sybase 服务器中,表 (TBL_RESOURCE) 中的某些行正在以随机间隔从未知来源中删除。我尝试了很多,但我无法找到正在删除该数据的源/文件/进程。有什么机制可以定位这个问题吗?我需要找出是谁在删除这些行。
我们如何知道是谁删除了它以及从哪个文件中删除?
我们可以使用触发器找到删除的来源吗?
【问题讨论】:
标签: sybase
好的,所以您没有存储过程或事务(这将允许正常的安全性:仅授予 sprocs 权限;没有用户直接更新表)。因此,您可以直接授予用户。这意味着他们可以从任何客户端程序(包括 Excel)中插入/更新/删除。因此,应用程序的源代码中很可能没有代码段从表中删除。随机删除行是在线数据库的本质。保护它免受未经授权的删除是 DBA 的要求。
我认为您已将权限授予特定的人,而不是整个世界,并且您不确定到底是谁在做坏事。最简单的方法是简单地询问小组。
下一个最简单的方法是为该表或允许的用户组(或角色)打开审核。但如果您没有设置审核,则可能会造成障碍。
第三,触发器。
还有其他方法,但它们的开销很大 (22%),需要大量的实施工作,而且您必须处理大量数据。
如果您的环境像听起来那样不安全和不稳定,并且不应该删除该表,只需撤销该(一个)表的权限,然后等到有人来找您说他们的权限已更改.
“这是假设您没有让每个用户都以 DBA 或其他 [特权] 帐户登录。”
这当然是一件非常愚蠢的事情,要求,恳求灾难。就像将所有表的删除权限授予所有用户一样愚蠢。我知道你来自哪里。
【讨论】:
这样的事情就可以解决问题。
create trigger deltrig
on TBL_RESOURCE
for delete
as
BEGIN
insert TBL_LOG (modifiedBy, modifiedDate)
select user_name(), getdate() from deleted
END
(显然你必须创建日志表 TBL_LOG)
【讨论】:
是的,您可以使用触发器。请参阅sybase doc 以了解如何创建删除触发器。在触发代码中,您可以选择将当前用户、用户 ID 等信息(插入)记录到表中以供审计。
【讨论】: