Как обеспечить целостность данных в Hyperledger Fabric, когда кто-то намеренно изменяет данные в CouchDB напрямую

В настоящее время у меня есть 2 организации в моей Hyperledger Fabric, и я получаю доступ к обеим организациям, используя сгенерированный API composer-rest-server.

Насколько я понимаю, Hyperledger Fabric хранит свои состояния внутри couchdb и сохраняет свои ledger в каждой организации, тем самым обеспечивая целостность.

Проблема в том, скажем, когда я пытаюсь изменить какие-то данные непосредственно в couchdb, используя метод cURL на org2, это показывает отсутствие целостности данных. Например :

Эти данные

"_id":"Asset:org.hospital.record.DataMedis001","_rev":"2-e590415fbc6092dc3ddc0b5271bab524","$class":"org.hospital.record.DataMedis","$registryId" :"org.hospital.record.DataMedis","$registryType":"Актив","alasanMasuk":"строка","alasanPulang":"строка","анамнез":"string","diagnosaPrimer":"< strong>DBD Tingkat I","diagnosaSekunder":"string","dokter":"resource:org.hospital.record.Dokter#001","idRekMedis":"001","kondisiSaatPulang":" строка","noRekMedis":"000001","pasien":"resource:org.hospital.record.Pasien#001","pemeriksaanFisik":"string","prognosaPenyakit":"string","rencanaTindakLanjut":" строка","riwayatAlergi":"строка","rujukan":"строка","terapiDiRs":"строка","tglKeluar":"строка","tglMasuk":"строка","tindakan":"строка" ,"~версия":"CgMBDQA="

Изменение диагноза в эти данные

"_id":"Asset:org.hospital.record.DataMedis001","_rev":"2-e590415fbc6092dc3ddc0b5271bab524","$class":"org.hospital.record.DataMedis","$registryId" :"org.hospital.record.DataMedis","$registryType":"Актив","alasanMasuk":"строка","alasanPulang":"строка","анамнез":"string","diagnosaPrimer":"< strong>Грипп","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":"строка","rujukan":"строка","terapiDiRs":"строка","tglKeluar":"строка","tglMasuk":"строка","tindakan":"строка"," ~версия":"CgMBDQA="

В результате данные между org1 и org2 больше не идентичны. Вот результат использования метода GET из composer-rest-server API:

введите здесь описание изображения

введите здесь описание изображения

Есть ли способ сохранить целостность его данных, когда кто-то атакует напрямую мой couchdb? или есть ли какая-либо конфигурация, которую я должен выполнить для composer-rest-server?

Я очень ценю любую помощь, которую вы можете предоставить.


person Sully Magnolia    schedule 25.06.2019    source источник


Ответы (2)


Государственная база данных не является источником правды; фактический регистр. База данных состояний на самом деле является постоянным кешем для последнего известного значения каждого ключа.

Как упоминает @risabh, политики одобрения используются для определения обновлений состояния. Таким образом, в следующий раз, когда будет транзакция, которая изменит это состояние, пока политика подтверждения выполняется, последнее значение «модифицированного» ключа будет перезаписано новым значением.

person Gari Singh    schedule 26.06.2019
comment
Спасибо за ваш ответ. Поправьте меня, если я ошибаюсь, насколько я знаю, composer-rest-server показывает данные из государственной базы данных. Итак, возможно ли реализовать различия в данных, когда кто-то модифицировал базу данных состояний? - person Sully Magnolia; 26.06.2019
comment
На самом деле вам нужно будет выполнить сильное чтение.... что означает выполнение вызовов нескольким одноранговым узлам для получения данных. Я не помню, добавил ли composer-rest-server возможность запрашивать несколько одноранговых узлов на бэкэнде. - person Gari Singh; 26.06.2019

Не могу комментировать, поэтому добавляю сюда.

Когда вы пытаетесь снова добавить данные для того же ключа через команду Invoke txn, от партнера, для которого данные были изменены, будет сообщение об ошибке подтверждения.

person Risabh Sharma    schedule 25.06.2019
comment
Извините, я немного запутался. Вы имеете в виду, что когда я пытаюсь добавить данные для того же ключа, это показывает мне ошибку, потому что данные с этим ключом уже добавлены? - person Sully Magnolia; 26.06.2019
comment
Данные в леджере хранятся в виде пары ключ-значение. Вы изменили данные состояния. Они будут связаны с ключом. Теперь предположим, что ваша политика одобрения установлена ​​на ORGa и ORGb. Когда вы пытаетесь обновить данные, которые вы изменили, поддерживающие одноранговые узлы будут имитировать выполнение чейнкода, и в идеале они отправят подписанное предложение обратно клиенту, если все в порядке, но вы изменили данные состояния для одной из организаций, поэтому наборы чтения и записи обоих поддерживающих одноранговых узлов не будут совпадать, и, следовательно, это приведет к отказу подтверждения. - person Risabh Sharma; 26.06.2019