访问从触发器内触发触发器的sql(Sybase)

时间:2010-06-28 15:19:46

标签: sql triggers monitoring sybase-ase

有没有办法从触发器中访问触发触发器的sql?我已经设法通过加入master..monProcessSQLText MDA表来获得它,但这仅适用于具有mon_role的用户,我不想将其提供给所有人。我错过了一个全局变量吗?

我正在尝试记录针对表运行的所有更新,以便将其追溯到IP地址和用户名。

这是ASE 12.5。

1 个答案:

答案 0 :(得分:1)

如果您正在尝试

  

记录针对表运行的所有更新,以便我可以将其追溯到IP地址和用户名

触发器肯定是错误的方法,触发器为此设计,并且还有其他ASE设施 为此而设计。它不是关于表,而是关于安全和监控。

  1. Sybase审计。
    它需要一些设置,比MAD表少得多;但最重要的是,它是专为审计而设计的(MDA不是)。并且没有针对MDA的编码要求。它具有高度可配置性,其目的是仅捕获您需要的内容,而不是更多内容。

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

  3. 一旦这些设施中的任何一个到位,那么,无论何时您想要询问谁更新了一张桌子,无论何时何地,您需要做的就是检查存档。与触发器无关,或者从触发器获取信息或向普通用户授予管理员权限时遇到困难。

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

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

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