快速简介:
我团队中的人员一直在研究生产数据库(sql server 2005)。我们添加了各种内容,例如约束,添加的触发器等。
现在我们发现某人或某事已在不同时间回滚我们的更改。问题是我们都共享一个共同的管理员登录。 (愚蠢,是的,我知道,我们正在解决这个问题)。它造成了大量的挫败感,此时我们只是想找出whodunnit。
你会如何追查有罪的一方?
注意:我不是在寻找解决这个问题的方法,这已经在做了。我正在寻找一种追踪罪魁祸首的方法。
答案 0 :(得分:10)
远离生产数据库。创建您的脚本并通过电子邮件发送给负责的DBA(如果您没有,请获取一个)。能够访问生产数据库的开发人员是灾难的秘诀 - 我没有它,也不想拥有它。
答案 1 :(得分:4)
追踪您的问题显然是一个症状,而不是原因:因为它是一个SQL Server 2005数据库,所以应该有一个开箱即用的“默认”跟踪。它非常轻量级,但确实包含一些对象创建和删除。您可以使用以下查询从sys.traces
视图查看它:
SELECT *
FROM sys.traces
WHERE id = 1
它仅在几MB之后滚动,因此它的有用性将取决于服务器上的活动量。
据推测,真正的原因是没有编写脚本和版本控制的更改。
同意其他提及生产数据库的所有更改只能由管理员而非个别开发人员完成的海报。
答案 2 :(得分:2)
我假设你有一个带有变更数据捕获特征的审计日志。这将跟踪每次变化的人员,内容和时间。
回滚是间歇性的还是一致的?您是否有机会关闭自动提交并忘记提交更改?
没有那么多人有足够的权限去做这样的事情。找出谁可以做到并问。比任何技术都要好。
哈克?它应该是内部的某个人。如果防火墙外的人可以访问该数据库,则需要与网络人员交谈。
尝试将监视器添加到该URL和端口以查看请求的来源。
答案 3 :(得分:2)
你需要注意的是,如果有人恶意改变数据库,并且他们拥有管理员访问权限,你必须假设他们足够智能以覆盖他们的踪迹。在这一点上,你可以阻止进一步的伤害,但如果攻击者有任何好处,你要么责怪错误的人,因为日志文件将被改变,或者所有证据指向合适的人都将消失。
最好的方法是拥有它,以便没有人可以直接管理员访问生产数据库。我们设置了一个系统,以便默认情况下没有帐户具有管理访问权限,并且每个人都有自己的帐户。没有人可以使用SA帐户。
有人必须授予帐户访问权限,并在获得授权后24小时自动删除。理想情况下,授予访问权限的同一人不应该是获得数据库管理访问权限的人。这样,两个人总是必须参与对系统进行更改。
理想情况下,两个人应该总是参与进行更改。这样第二个人可以验证第一个人做了什么。 (工作几个小时后,晚上10点很容易出错)。
人们会反驳说,有时他们“需要”能够快速做出改变。在大多数地方情况并非如此。让第二个人参与可能需要额外的10分钟,并解释情况。清理有关窃取/更改公司数据的人的声誉需要数年时间。
答案 4 :(得分:1)
通过添加您应具备的用户级安全性。
答案 5 :(得分:1)
你能否将回滚时间与团队成员的下落交叉参考?
或者 - 或者 - 问问每个人?
答案 6 :(得分:1)
SQL Server 2005添加了DDL和DML触发器,因此您可以跟踪谁在修改数据以及数据结构。
答案 7 :(得分:1)
如果你正在修理它 - 并且通过“修复它”我的意思是锁定生产数据库并遵循这里提到的一些其他做法 - 那么不要担心找到罪魁祸首。无论如何它可能是偶然的,当你把它锁定时,有人会开始想知道为什么有些东西不起作用。
追踪那些无法解决任何问题的用户。如果它是恶意的,他们会撒谎并说这是偶然的。
根本原因是数据库的安全性,因此故障组是允许数据库易受影响的组。
答案 8 :(得分:0)
要求每个人都没用,人们撒谎和/或不知道他们搞砸了。我们认为这是恶意的,但希望不是。
答案 9 :(得分:0)
关闭除一个以外的所有ID的时间。确保那个人知道他们在做什么,不会说谎。
答案 10 :(得分:0)
除了你在回复中已经收到的内容,我的投票结果是没有人;你只是误解了你是如何使用这个系统的。
现在,不要误会我的意思,我不是在谈论无能。但是,我的意思是,可能会有定期运行的脚本,并且有人正确地提到有时自动提交可能会开启与关闭,而某些人会被愚弄。
我也相信你在生产环境中混合任何开发工作都会遇到麻烦。磁盘空间很便宜 - 这几天TB的价格不到300美元!在大多数情况下,您不需要为开发工作提供高性能......