Mattingly解释说,Azure DevOps工程师偶尔需要对生产数据库进行快照,以便调查客户升级或评估潜在的性能改进。为了确保这些快照数据库得到清理,每天都会运行一个超过特定期限便会将其删除的后台作业。
在最近一个敏捷开发的冲刺中,Azure DevOps工程师执行了一个代码升级,用受支持的Azure.ResourceManager.* NuGet包替换已弃用的Microsoft.Azure.Managment.*包。这导致了一个大的拉取请求,交换了旧包中的API调用和新包中的API调用。拼写错误就隐藏在这个拉取请求中,该错误将删除Azure SQL数据库的调用替换成删除托管数据库的Azure SQL Server的调用。由于错误的代码只在特定条件下运行,因此没能被现有测试覆盖。
根据Mattingly的事件报告,在将Sprint 222部署到Ring 0(微软的内部Azure DevOps 组织)时,由于其中不存在任何快照数据库,所以没有执行删除作业。几天后,软件更改被部署到南巴西的客户环境Ring 1。该环境中存在能够触发错误的快照数据库,导致后台作业删除了整个Azure SQL Server和所有17个生产数据库。自此不再能处理任何客户流量,所幸数据并未丢失。
在此次事件后,微软表示会采取一系列措施以避免未来发生类似的问题。例如确保所有快照数据库创建在不同的Azure SQL Server上,以避免与生产数据库冲突。
编辑:左右里
资讯来源:Microsoft
转载请注明出处和本文链接
微软资讯推荐
win10系统推荐