Wiki Address: https://social.technet.microsoft.com/wiki/contents/articles/51925.use-sql-query-to-check-who-deleted-the-documents.aspx

有个客户是一个跨国公司的SharePoint IT管理人员,前段时间的某一天接到很多end user的投诉:批量的documents被人删除,并且Site Collection的recycle bin中没有任何删除记录,如大家所知,数据对一个企业来说是宝贵的财富,一旦数据丢失必然是Critical Issue.

该客户接到批量的end user投诉后,从周五到下一个周一利用3天时间昼夜排查SharePoint每一个Web front end Server的auditor log,太多log文件无法排查具体的删除动作是谁?

后来该客户与我联系后,了解了全部背景后,迫在眉睫的有2个问题需要解决:

• 需要查出谁误删除了大量的文档,同时要给领导汇报重大事件的Report和日后的事件如何避免的方案。
• 在SLA规定的范围内,尽快将丢失的文档恢复到原来的位置。

客观讲,文档被删除后,在SQL的EventCache里是有document的changelog记录的,如果客户能说服SQL Team执行SQL query是可以查询到谁做了操作。

具体的操作如下:

1. 在alldocs表中检索丢失数据所在的Library ID,如下图所示:

2. 在Eventcache表中,查询对应library id中的item的event type和modify by,如下图所示:eventtype=16388,就意味着是'A list item is deleted' + 'A generic delete event'的组合事件说明文档被删除,可以通过https://sebmatthews.net/microsoft/from-the-database-sharepoint-eventcache-eventtype-codes/ 查询对应的event type所表示的含义,modify by的column显示的account就是删除文档的具体用户。

在查找用户删除Document之后,如何恢复丢失的数据也需要谨慎操作的,如果用户没有针对Granular进行数据备份,而是采用Database级别备份的话,那么上一个备份的数据距离当前时间产生的新数据会因为整个DB级别的还原而丢失,考虑这一点我推荐的方案:把备份DB还原到UAT环境中,找到丢失documents的library,采用sync的方式同步到生产环境对应的位置。

事件反思:作为资深的IT管理和维护人员,灾备方案和数据操作监控需考虑全面 ,不能灾备发生时,再考虑处理模式。