当有人故意直接更改 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="
结果是 org1
和 org2
之间的数据不再相同。这是使用 composer-rest-server
API:
中的 GET
方法的结果
当有人直接攻击我的 couchdb
时,有什么方法可以保持其数据完整性?或者我应该对 composer-rest-server
进行什么配置?
非常感谢您提供的任何帮助。
不能发表评论所以在这里添加。
当您尝试通过调用 txn 再次为同一密钥添加数据时,将会收到来自数据为 changed.This 的对等方的背书失败消息,显示读写中存在未匹配项设置,数据被篡改。
状态数据库不是真相的来源;实际的分类帐是。状态数据库实际上是每个键的最后一个已知值的持久缓存。
正如@risabh 所暗示的,背书策略用于确定对状态的更新。所以下次有一个交易改变那个状态,只要满足背书策略,"modified"键的最新值就会被新值覆盖。
我目前在我的 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="
结果是 org1
和 org2
之间的数据不再相同。这是使用 composer-rest-server
API:
GET
方法的结果
当有人直接攻击我的 couchdb
时,有什么方法可以保持其数据完整性?或者我应该对 composer-rest-server
进行什么配置?
非常感谢您提供的任何帮助。
不能发表评论所以在这里添加。
当您尝试通过调用 txn 再次为同一密钥添加数据时,将会收到来自数据为 changed.This 的对等方的背书失败消息,显示读写中存在未匹配项设置,数据被篡改。
状态数据库不是真相的来源;实际的分类帐是。状态数据库实际上是每个键的最后一个已知值的持久缓存。
正如@risabh 所暗示的,背书策略用于确定对状态的更新。所以下次有一个交易改变那个状态,只要满足背书策略,"modified"键的最新值就会被新值覆盖。