有没有办法从触发器中访问触发触发器的sql?我已经设法通过加入master..monProcessSQLText MDA表来获得它,但这仅适用于具有mon_role的用户,我不想将其提供给所有人。我错过了一个全局变量吗?
我正在尝试记录针对表运行的所有更新,以便将其追溯到IP地址和用户名。
这是ASE 12.5。
答案 0 :(得分:1)
如果您正在尝试
记录针对表运行的所有更新,以便我可以将其追溯到IP地址和用户名
触发器肯定是错误的方法,触发器不为此设计,并且还有其他ASE设施 为此而设计。它不是关于表,而是关于安全和监控。
Sybase审计。
它需要一些设置,比MAD表少得多;但最重要的是,它是专为审计而设计的(MDA不是)。并且没有针对MDA的编码要求。它具有高度可配置性,其目的是仅捕获您需要的内容,而不是更多内容。
监视。
我不推荐MDA表,但是因为你已经安装了它们,并且你已经启用了监控,并且接受了捕获SQL文本的22%的开销......这些信息非常短暂。为了将它们用于任何相关目的,例如你的,你需要编写一个捕获和存储机制,将所有必需的信息存档到存档数据库。这必须持续进行,并且完全独立于触发器等。您还可以动态过滤以减少存储的数据量(警告,这是巨大的)。清除7天以上的数据等。这本身就是一个小项目,这就是第三方商业化的原因。
一旦这些设施中的任何一个到位,那么,无论何时您想要询问谁更新了一张桌子,无论何时何地,您需要做的就是检查存档。与触发器无关,或者从触发器获取信息或向普通用户授予管理员权限时遇到困难。
此外,需要了解的是,您没有正常的安全性,表格正在由用户直接更新;因此,直接更新权限已授予特定用户,或更糟糕的是,所有用户。结果是,无法知道谁正在更新表,以及谁在破坏数据或参照完整性。
就审计而言,如果安全性到位,那么审计负担也会大大减少:您只需要审计存储的proc执行。否则,您需要审核所有表的所有更新。