对于我的许多表,我添加了审核触发器(基于此 wiki页面)。它工作得很好,并帮助我多次找出谁更改了系统中的内容。我们有一个 Python/Django 应用程序,它位于数据之上,并且在 Git 中跟踪该代码。但是,我们系统的某个区域似乎没有很好地跟踪更改。这就是 PostgreSQL 中的函数/触发器等。我希望有一种方法可以向模式中添加与数据本身类似的审计功能。
DBA 如何跟踪这些变化?注意:我所处的位置是,不止一个人拥有足够的权限来“创建或替换”一个函数,所以我不一定指望一个人编写脚本并将其签入 Git,我当然可以不要强迫他们。如果可能,它需要是自动的。
我考虑过编写一个 python 脚本来“创建”一个脚本文件并将其写入文件,然后以编程方式将更改提交到 git repo。
另一种选择是将一些表添加到我的审计模式中,然后每晚查询并查找更改并将它们正确地放入表中。当然可以,但不如通过 git 进行差异/责备那么好。
这可能不是最大的问题,因为我不确定我在寻找什么,并且可能没有确切的“正确”答案,但我想知道人们在做什么。我已经对该主题进行了一些“谷歌搜索”,但我没有找到很多(也许我只是使用了错误的术语)。
最后,我目前使用的是 PostgreSQL 9.1。
现在真的没有一个很好的选择。
您需要确保人们正确且一致地使用修订控制。
一些事后检查可用于查询意外的过程更改,并在
pg_proc.prosrc
列与您在修订控制中的内容不匹配时发出警报。如有必要,您可以通过一个人的批准强制进行所有更改。或者,您可以拒绝对除一个以外的所有帐户创建和更新过程的访问权限 - 并让该帐户自动应用通过钩子提交给 git 的更改。不过我不建议这样做——它会使操作非常受限,并且难以解决意外问题。
有点晚了,但是您可以定期编写函数脚本,然后将其作为自动化过程提交给 git。这样,您至少可以跟踪更改,并能够找到已在数据库中覆盖的旧实现。