知识卡片
测试环境的种子数据不能来自生产数据库镜像
内容
集成测试需要真实的数据库来验证端到端行为,直接把生产数据库整体复制一份用作测试种子数据看起来最省事,但这样一来任何有权限运行这些测试的人都能顺带接触到其中的真实敏感信息,违背了最小特权原则并带来安全风险。更稳妥的做法是用专门构造的、不敏感的数据去初始化测试环境,这样做还有一个附带收益——测试环境可以随时清空重置到已知的干净状态,降低集成测试的脆弱性。
参考来源
- 位置:《Google系统架构解密:构建安全可靠的系统》第13章《代码测试》13.2节(源文件:`../OREILY动物书合辑 图灵新版/_epub-src/text/part0014_split_106.html`)
- 结论依据:原文明确警告"数据库提供了一系列丰富的真实业务数据,因此很可能将实际的数据库镜像复制到测试环境中。但应避免使用这种不当的模式……这样的实现方式违背了最小特权原则,并可能带来安全风险",建议"可使用不敏感的测试数据作为系统的种子"。
- 原始内容:数据库提供了一系列丰富的真实业务数据,因此很可能将实际的数据库镜像复制到测试环境中。但应避免使用这种不当的模式,任何人执行使用这些数据库的测试用例时,都可接触其中可能包含的敏感数据……相反,可使用不敏感的测试数据作为系统的种子(seed)。使用这种方法后,还能轻松地将测试环境清空至已知的干净状态。