当有人故意直接更改 couchdb 中的数据时,如何确保 Hyperledger Fabric 中的数据完整性

How to ensure data integrity in Hyperledger Fabric when someone intentionally changes data in couchdb directly

我目前在我的 Hyperledger Fabric 中有 2 个组织,我正在使用 composer-rest-server 生成的 API 访问这两个组织。

据我了解,Hyperledger Fabric 将其状态保持在 couchdb 并在每个组织中保持其 ledger 从而提供完整性。

问题是,当我尝试在 couchdb 中使用 org2 上的 cURL 方法直接更改某种数据时,它显示缺乏数据完整性。例如:

这个数据

"_id":"\u0000Asset:org.hospital.record.DataMedis\u0000001\u0000","_rev":"2-e590415fbc6092dc3ddc0b5271bab524","$class":"org.hospital.record.DataMedis","$registryId":"org.hospital.record.DataMedis","$registryType":"Asset","alasanMasuk":"string","alasanPulang":"string","anamnesis":"string","diagnosaPrimer":"DBD Tingkat I","diagnosaSekunder":"string","dokter":"resource:org.hospital.record.Dokter#001","idRekMedis":"001","kondisiSaatPulang":"string","noRekMedis":"000001","pasien":"resource:org.hospital.record.Pasien#001","pemeriksaanFisik":"string","prognosaPenyakit":"string","rencanaTindakLanjut":"string","riwayatAlergi":"string","rujukan":"string","terapiDiRs":"string","tglKeluar":"string","tglMasuk":"string","tindakan":"string","~version":"\u0000CgMBDQA="

将诊断更改为此数据

"_id":"\u0000Asset:org.hospital.record.DataMedis\u0000001\u0000","_rev":"2-e590415fbc6092dc3ddc0b5271bab524","$class":"org.hospital.record.DataMedis","$registryId":"org.hospital.record.DataMedis","$registryType":"Asset","alasanMasuk":"string","alasanPulang":"string","anamnesis":"string","diagnosaPrimer":"Influenza","diagnosaSekunder":"string","dokter":"resource:org.hospital.record.Dokter#001","idRekMedis":"001","kondisiSaatPulang":"string","noRekMedis":"000001","pasien":"resource:org.hospital.record.Pasien#001","pemeriksaanFisik":"string","prognosaPenyakit":"string","rencanaTindakLanjut":"string","riwayatAlergi":"string","rujukan":"string","terapiDiRs":"string","tglKeluar":"string","tglMasuk":"string","tindakan":"string","~version":"\u0000CgMBDQA="

结果是 org1org2 之间的数据不再相同。这是使用 composer-rest-server API:

中的 GET 方法的结果

当有人直接攻击我的 couchdb 时,有什么方法可以保持其数据完整性?或者我应该对 composer-rest-server 进行什么配置?

非常感谢您提供的任何帮助。

不能发表评论所以在这里添加。

当您尝试通过调用 txn 再次为同一密钥添加数据时,将会收到来自数据为 changed.This 的对等方的背书失败消息,显示读写中存在未匹配项设置,数据被篡改。

状态数据库不是真相的来源;实际的分类帐是。状态数据库实际上是每个键的最后一个已知值的持久缓存。

正如@risabh 所暗示的,背书策略用于确定对状态的更新。所以下次有一个交易改变那个状态,只要满足背书策略,"modified"键的最新值就会被新值覆盖。