SQL Server - 随机删除记录?

时间:2018-02-09 16:14:56

标签: sql-server asp.net-mvc entity-framework

我有一个我为客户开发的ASP.NET MVC应用程序。 MVC 5,EF 6.

Web服务器和数据库服务器是分开的。突然从数据库服务器中删除了一堆数据。用户没有执行删除功能。是否有任何情况会导致这种情况?记录似乎是随机的。没有存储过程,触发器等....运行。该应用程序运行良好数月。 SQL Server(2014版)将删除表中记录的任何情况?没有向用户显示错误。

****更新****

我最近推出的唯一“删除”相关代码就是这个......

   [Authorize]
    public class WorkResultsController : Controller
    {
        private readonly ABC_WorkingContext db = new ABC_WorkingContext();

        public ActionResult DeleteEvent(int id, bool? performRedirectAfterDelete = true)
        {
            if (!WorkFormServices.IsEditOrDeleteEnabled(id)) return this.HttpNotFound();

            var @event = this.db.Events.Find(id);

            try
            {
                // first remove any Work questions related to this event
                var WorkResultsToDelete = this.db.WorkResults.Where(e => e.EventId == id).ToList();
                foreach (var row in WorkResultsToDelete) this.db.WorkResults.Remove(row);

                this.db.Events.Remove(@event);
                this.db.SaveChanges();

                if (performRedirectAfterDelete == true) return this.RedirectToAction("Index", "WorkScheduler");
                return this.Json(
                    new { success = true, responseText = "Delete success!" },
                    JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return this.Json(
                    new { success = false, responseText = "Delete failed!!" },
                    JsonRequestBehavior.AllowGet);
            }
        }

我想只删除与特定ID相关的WorkResults记录。所以,我相信这是正常的。您是否看到可能发生的任何意外删除?

2 个答案:

答案 0 :(得分:3)

我同意Min - 一个DB不会删除数据。这很可能是代码(应用程序或数据库方面)问题或某种违规行为。

我会检查:

  • 应用程序代码 - 是否存在错误的SQL调用/声明(与您丢失数据的表相关)可能已删除的内容超出应有的数量
  • 存储过程,触发器 - 与上面相同 - SQL错误可能造成严重破坏
  • 表关系 - 是否设置了任何不需要的级联删除?
  • EF - 实体之间是否设置了不需要的级联?
  • 登录 - 为了理智 - 更改您的应用使用的登录密码......这可能是违规行为 - 很难说没有看到缺失数据的模式

答案 1 :(得分:2)

首先,没有商业数据库自行删除随机数据。如果它确实删除了其客户的数据,其制造商将被客户起诉。
因此,在某些地方有DELETE查询或有人在SQL SERVER Studio上执行DELETE操作。您可以监视数据库查询。检查您的查询并查找删除数据的查询。并询问DBA或DB Operator是否执行了一些查询。

根据我的经验,没有“没有这样的查询”。