数据库安全:多租户与注入防护
1. 多租户数据分离范式
许多 Web 应用会同时为多个客户端提供服务,这就涉及到在数据库中存储业务数据或逻辑。为了确保不同客户端的数据安全隔离,有以下几种多租户数据分离方法:
- 完全隔离的数据库 :每个客户端拥有独立的数据库,可根据自身需求定制数据结构。这种方法安全性高,但基础设施成本也高,因为数据库会占用大量空间,例如一个空的 MongoDB 数据库就需要 32MB 空间。适用于对安全有严格要求且愿意为安全支付额外费用的客户,可用于大多数 SQL 和 NoSQL 数据库(包括 MongoDB)。
- 同一数据库,分离模式 :使用同一个数据库,但为每个客户端分离模式(表/集合),每个租户只能访问自己的表。各租户可定制数据结构,保持数据库连接级别独立。不过,这种方法备份困难,在 MongoDB 中无法充分使用,因为它没有集合级别的访问控制,且单个数据库中创建集合的数量有限。
- 共享数据库和模式 :将所有客户端的数据存储在同一个数据库中,共享数据库模式,通过为每一行提供唯一的租户标识符来分离数据。这是最便宜的方法,基础设施要求最低,但安全实现成本最高,需要在代码中处理安全问题并自行管理数据分离机制。大多数应用最初采用共享模式,随着业务发展和安全需求的增加,可逐步过渡到隔离模式。
方法 | 安全性 | 基础设施成本 | 实现成本 | 适用场景 |
---|