面试题答案
一键面试设计思路
- 基于租户ID进行隔离:在文档结构中,为每个文档添加一个租户ID字段。这样在视图设计时,可以依据该字段来区分不同租户的数据。
- 视图函数定制:为每个租户定制专门的视图函数,以确保视图仅返回该租户有权访问的数据。
- 安全机制整合:结合CouchDB自身的安全机制,如用户角色和权限设置,进一步保障租户间的数据隔离。
技术手段
- 文档设计:
在每个文档中添加{ "_id": "example_doc_id", "tenant_id": "tenant_123", "data": { "field1": "value1", "field2": "value2" } }
tenant_id
字段用于标识租户。 - 视图函数设计:
在CouchDB的设计文档中,使用JavaScript编写视图函数。例如,为租户
tenant_123
设计视图:
这样该视图仅会返回function (doc) { if (doc.tenant_id === "tenant_123") { emit(doc._id, doc.data); } }
tenant_id
为tenant_123
的文档数据。 - 安全机制配置:
通过CouchDB的
_users
数据库,为不同租户创建独立的用户,并分配相应的角色。在设计文档的security
属性中,配置角色对视图的访问权限。例如:
只有属于{ "security": { "tenant_123_role": { "read": true } } }
tenant_123_role
角色的用户才能访问对应租户的视图。