2010-06-28 276 views
0

有没有办法从触发器中访问触发触发器的sql?我已经设法通过加入master..monProcessSQLText MDA表来获得它,但这只适用于mon_role的用户,我不想将它提供给每个人。有没有我错过的全球变量?从触发器(Sybase)中触发触发器的sql

我想记录所有更新运行在一张桌子上,所以我可以追溯到一个IP地址和用户名。

这是ASE 12.5。

+0

请查看答案并提出问题。 – PerformanceDBA 2010-11-28 01:48:50

回答

1

如果你想

日志中的所有更新运行对表,所以我可以追根溯源到一个IP地址和用户名

触发肯定是走错了路去处理它,触发器是而不是专为此设计的,并且还有其他ASE设施,其中为此设计的。这不是关于桌面,而是关于安全和监视。

  1. Sybase审计。
    它需要一些设置,比MAD表的开销小得多;但最重要的是,它是为审计而设计的(MDA不是)。并没有编码要求,如MDA。它是高度可配置的,这个想法是只捕获你所需要的,而不是更多。

  2. 监测。
    我不会推荐MDA表格,但是因为您已经安装了这些表格,并且已经启用了监视功能,并且接受了22%的捕获SQL文本的开销......这些信息非常短暂。为了将它们用于任何相关目的(如您的),您需要编写一个捕获和存储机制,将所有必需的信息归档到归档数据库。这必须在持续的基础上完成,并且完全独立于触发器等。您还可以实时过滤以减少存储的数据量(警告,数量巨大)。清除7天以上的数据等。这本身就是一个小项目,这就是为什么从第三方可以买到的原因。

一旦其中任一设备到位,那么,分开,每当你想打听谁更新的表,时间和地点,所有你需要做的是检查档案。与触发器无关,或从触发器获取信息或向普通用户授予管理员权限时遇到困难。

另外,需要了解的是,您没有正常的安全性,表格正在被用户直接更新;因此直接更新权限已授予特定用户,或者更糟糕的是已授予所有用户。结果是,没有办法知道谁在更新表,以及谁在破坏数据或参照完整性。

  • 安全的方法是将整个事务放在存储过程中,从而消除了不完整事务(以及提高执行速度)的可能性;并授予特权的权限,而不是表,从而消除直接更新。随着时间的推移,您可能希望在服务器中实现安全性,以避免后果逐一被追查并逐一关闭,这是一个没有限制的过程。

就审计而言,如果安全到位,那么审计负担也大大降低:您只需审计存储的proc执行情况。否则,您需要审计所有表的所有更新。