SlideShare a Scribd company logo
@
#MDBlocal
Salman Baset
Product Security
salman_baset
Using MongoDB Transactions to Implement
Cryptographically Verifiable Change History
#MDBLocal
Safe Harbor
#MDBLocal
Drug Development
Long and complex process
End goal: drug released is “safe” for usage.
Preclinical* Clinical (trials)*
Stage 1 Stage 2 Stage 2 Stage N Phase I Phase II Phase III Phase N
** https://www.cleardata.com/wp-content/uploads/2018/01/GxP_Brochure_FINAL.pdf
Icons made by Freepik from www.flaticon.com
* Illustration of
preclinical or clinical
timelines.
#MDBLocal
Drug Development
Long and complex process
End goal: drug released is “safe” for usage.
Preclinical* Clinical (trials)*
Stage 1 Stage 2 Stage 2 Stage N Phase I Phase II Phase III Phase N
** https://www.cleardata.com/wp-content/uploads/2018/01/GxP_Brochure_FINAL.pdf
Icons made by Freepik from www.flaticon.com
Good Practices (GxP) regulations for drug development (US, FDA), and include**
● Traceability: reconstruct development history of drug
● Data integrity: avoid data manipulation and breaches
* Illustration of
preclinical or clinical
timelines.
#MDBLocal
Drug Development
Long and complex process
End goal: drug released is “safe” for usage.
Preclinical* Clinical (trials)*
Stage 1 Stage 2 Stage 2 Stage N Phase I Phase II Phase III Phase N
** https://www.cleardata.com/wp-content/uploads/2018/01/GxP_Brochure_FINAL.pdf
Icons made by Freepik from www.flaticon.com
Good Practices (GxP) regulations for drug development (US, FDA), and include**
● Traceability: reconstruct development history of drug
● Data integrity: avoid data manipulation and breaches
* Illustration of
preclinical or clinical
timelines.
Could you as a developer record drug development history in an easy way for reconstruction?
Could you as a developer implement measures (e.g., cryptographic verification) for detecting
data manipulation?
#MDBLocal
Banking Transaction
1. Visit ATM.
2. Check balance.
3. Withdraw $20.
4. Get a paper receipt of
remaining $80 balance.
$100
$80
$80
Icons made by ultimatearm and Vectors Market from www.flaticon.com
ATM
#MDBLocal
Banking Transaction
1. Visit ATM.
2. Check balance.
3. Withdraw $20.
4. Get a paper receipt of
remaining $80 balance.
$100
$80
$80
1. Visit bank website.
2. Check balance.
3. Transfer $20.
4. Get an email of transaction
and screenshot of remaining
balance.
$100
$80
Icons made by ultimatearm and Vectors Market from www.flaticon.com
ATM Online
#MDBLocal
Banking Transaction
1. Visit ATM.
2. Check balance.
3. Withdraw $20.
4. Get a paper receipt of
remaining $80 balance.
$100
$80
$80
1. Visit bank website.
2. Check balance.
3. Transfer $20.
4. Get an email of transaction
and screenshot of remaining
balance.
$100
$80
Icons made by ultimatearm and Vectors Market from www.flaticon.com
ATM Online
Are two transactions equivalent?
Are two “confirmations” equivalent?
#MDBLocal
Banking Transaction
1. Visit ATM.
2. Check balance.
3. Withdraw $20.
4. Get a paper receipt of
remaining $80 balance.
$100
$80
$80
1. Visit bank website.
2. Check balance.
3. Transfer $20.
4. Get an email of transaction
and screenshot of remaining
balance.
$100
$80
Icons made by ultimatearm and Vectors Market from www.flaticon.com
ATM Online
Are two transactions equivalent?
Are two “confirmations” equivalent?
Could there be a digital receipt (with cryptographic verification) of your transaction and
balance when you logout of the website?
#MDBLocal
Outline - Using MongoDB Transactions to Implement
Cryptographically Verifiable Change History
• Goals
• What is change history?
• Demo of a proof-of-concept
• What is cryptographically verifiable change history?
• Discussion and feedback
#MDBLocal
Two Goals
(1) Describe
• Using MongoDB Transactions to Implement Cryptographically Verifiable
Change History
• while preserving MongoDB MQL and API interface
#MDBLocal
Two Goals
(1) Describe
• Using MongoDB Transactions to Implement Cryptographically Verifiable
Change History
• while preserving MongoDB MQL and API interface
(2) Feedback and discussion
• Would a similar functionality in a new product address and simplify your data
integrity needs?
• Would you rather see enhancements in existing auditing?
• Help us build the roadmap!
• Send an email to customer-security-working-group@mongodb.com with the subject “JOIN” to
to get involved, or fill out the survey: https://www.surveymonkey.com/r/3RNLJ2L
#MDBLocal
What is Change History?
Informally
- History of change for an entity, going back to some “reference origin”
#MDBLocal
Why is Change History Needed?
• To meet application data integrity requirements (e.g., drug
development, crypto exchanges, HR)
• To meet information security and compliance requirements (e.g., did
someone tamper with the stored data)
These requirements are not mutually exclusive.
#MDBLocal
Why is Change History Needed? (focus of this talk)
• To meet application data integrity requirements (e.g., drug
development, crypto exchanges, HR)
• To meet information security and compliance requirements
#MDBLocal
What is Change History in a Database Context?
• Change = CUD (create, update, delete)
#MDBLocal
What is Change History in a Database Context?
• Change = CUD (create, update, delete)
• What about read?
#MDBLocal
Application Change History != Database Auditing
• Audit logs are stored in files
• Not easy to get document change history from audit files
• e.g., getDocHistory(_id)
#MDBLocal
Example Scenario for Change History
Icon credit flaticon.com
● A (financial) website is required to show user all changes they have made to their
account (e.g., address or name updates). The most recent user information should be
visible within each site web page.
● The financial website stores all historical information in MongoDB
1. Update my info
4. Updated
2. Update in DB
3. Updated
Financial
website
#MDBLocal
Example Scenario for Change History
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York",
"State": "NY"
}
1. User passes their information to a website,
which stores it as MongoDB document
2. User updates their address
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL"
}
3. User wants to see previous updates to its
address (e.g., its a credit application)
How to implement it?
#MDBLocal
Options for Implementing Change History
Relevant links
http://www.askasya.com/post/trackversions/
http://www.askasya.com/post/revisitversions/
• Many, e.g.,
• Store a full copy of the document upon change
• Within the same document
• As a new document in the same collection
• As a new document in a separate collection
• Store deltas
} may need atomic updates (e.g.,
MongoDB Transaction)
#MDBLocal
Options for Implementing Change History
• Many, e.g.,
• Store a full copy of the document upon change
• Within the same document
• Document size limitation*, query complexity (for historic data)
• As a new document in the same collection
• As a new document in a separate collection
• Store deltas
* https://docs.mongodb.com/manual/reference/limits/
#MDBLocal
Options for Implementing Change History
• Many, e.g.,
• Store a full copy of the document upon change
• Within the same document
• As a new document in the same collection
• query complexity and speed, e.g., for current version. how to link current version
with previous version? multiple documents to update?
• As a new document in a separate collection
• Store deltas
#MDBLocal
Options for Implementing Change History
• Many, e.g.,
• Store a full copy of the document upon change
• Within the same document
• As a new document in the same collection
• As a new document in a separate collection (RECOMMENDED)
• how to link current version with previous version? multiple documents to update?
• Store deltas
#MDBLocal
Demo POC
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
"_cryptoevidence": ***,
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York,
"State": "NY",
"_cryptoevidence": ***,
}
Update
document
Insert
db.customers.insert_one_ledger({“_id”: doc_id, “First name”: “Jane”, “Last name”: “Hill”, “State”:
“IL”, ...})
doc_id = db.customers.insert_one_ledger({“First name”: “Jane”, “Last name”: “Hill”, “State”, “NY”, ...})
Source code of demo available @ https://github.com/salmanbaset/mdb_ledger
Verify
document
db.customers.verify_one_ledger({“_id”: doc_id})
Delete
document
db.customers.delete_one_ledger({“_id”: doc_id})
customers customers_history
#MDBLocal
DIY: Use separate collections for current and historical
data
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York",
"State": "NY",
"Timestamp": TS
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": $$now,
}
db.col.find_one_and_update()
db.col_history.find()
Explicit separate
collection maintenance
in application code.
Update db.col_history.insert_one()
db.col.find()
● programmer_code.update({"First name": "Jane", "Last name": "Hill"}, { $set: {"Address": "1
Michigan Avenue", "City": "Chicago", "State": "IL"}})
○ Transaction
■ olddoc = db.col.findOneAndUpdate()
■ db.col_history.insert_one(olddoc)
● programmer_code.find({"First name": "Jane", "Last name": "Hill"})
○ db.col.find()
● programmer_code.find_history({"First name": "Jane", "Last name": "Hill"})
○ db.col_history.find()
Find
history
Current
doc
New
doc
#MDBLocal
Want something more familiar? Create a collection as a
‘ledger’, and use existing driver functions as is (1/3)*
● db.create_collection({flags: ledger})
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York",
"State": "NY",
"Timestamp": TS
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
}
Current
doc
New
doc
* This is an idea. Discuss towards the end.
#MDBLocal
Want something more familiar? Create a collection as
‘ledger’, and use existing driver functions as is (2/3)*
● db.create_collection({flags: ledger})
● db.col.update_one({"First name": "Jane", "Last name": "Hill"}, { $set: {"Address": "1
● Michigan Avenue", "City": "Chicago", "State": "IL"}}) - If updating an existing document, it inserts
the existing document in a “history” collection and updates the existing document.
● db.col.find_one({"First name": "Jane", "Last name": "Hill"})
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York",
"State": "NY",
"Timestamp": TS
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
}
Current
doc
New
doc
* This is an idea. Discuss towards the end.
#MDBLocal
Want something more familiar? Create a collection as
‘ledger’, and use existing driver functions as is (3/3)*
● db.create_collection({flags: ledger})
● db.col.update_one({"First name": "Jane", "Last name": "Hill"}, { $set: {"Address": "1
● Michigan Avenue", "City": "Chicago", "State": "IL"}}) - If updating an existing document, it inserts the
existing document in a “history” collection and updates the existing document.
● db.col.find_one({"First name": "Jane", "Last name": "Hill"})
● db.col.find_one_history({"First name": "Jane", "Last name": "Hill"}) <= NEW FUNCTION
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York",
"State": "NY",
"Timestamp": TS
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
}
Current
doc
New
doc
* This is an idea. Discuss towards the end.
#MDBLocal
Are we done?
• If all you wanted was to store and maintain change history for a
document in MongoDB, the above operations might all be you need.
• Use MongoDB Transactions to Implement Change History
• Talk title: Use MongoDB Transactions to Implement Cryptographically
Verifiable Change History
#MDBLocal
What is Cryptographic Verification and Why is it Needed?
Informally
• If a single document has been inserted, updated, or deleted, a “user”
wants to verify that the document (or its history) has not been
manipulated (e.g., upon retrieval).
Benefits
• Enhanced data integrity for applications.
#MDBLocal
Example Scenario for Cryptographic Verification
Icon made by Dave Gandy from flaticon.com
● Steps 1-5 (above picture): A (financial) user adds or updates their information in the
website. The website returns crypto-evidence of their information (e.g., in the form of QR
code) to the end user, which the user stores in their mobile wallet.
● On subsequent logins, the user can use the QR code to validate that the information it
provided previously matches the one returned by the website.
1. Update my info
4. Updated and
returns QR code
of crypto evidence
as a digital receipt
2. Update in DB
3. Updated. crypto
evidence of
inserted information
5. stored
in digital
wallet
#MDBLocal
Who is the user, what is the manipulation?
Who is the “user”?
• Developer: uses MongoDB for storing and retrieving documents
• Application user: uses a website to store and retrieve information.
The website uses MongoDB.
Who can manipulate the change history?
• DBA
• Developer
• Application user
• Malicious actor
• ...
#MDBLocal
Manipulation Example
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "ID",
"Timestamp": now,
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New Jersey,
"State": "NY",
}
Manipulated HistoryManipulated Current
#MDBLocal
What is Cryptographic Verification? - Example using
Hashing
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
"_cryptoevidence": ***,
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York,
"State": "NY",
"_cryptoevidence": ***,
}
HistoryCurrent
"_cryptoevidence" = SHA256(JSON.stringify({
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York,
"State": "NY",
}))
"_cryptoevidence" = SHA256(JSON.stringify({
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
}) + )
Implementation detail: Keys in JSON document should be sorted before crypto evidence computation (e.g., hashing)
#MDBLocal
When can Cryptographic Verification be performed?
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
"_cryptoevidence": ***,
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York,
"State": "NY",
"_cryptoevidence": ***,
}
Upon read
Upon insert
find_history_ledger({“First name”: “Jane”, “Last name”: “Hill”})
verify_history({“First name”: “Jane”, “Last name”: “Hill”})
insert_ledger({“First name”: “Jane”, “Last name”: “Hill”, ...}) - fail inserts if tampering detected (e.g., in
previous document version or all previous document versions)
#MDBLocal
Is Cryptographic Verification over a Single Document
History?
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Michigan Avenue",
"City": "Chicago",
"State": "IL",
"Timestamp": now,
"_cryptoevidence": ***,
}
{
"First name": "Jane",
"Last name": "Hill",
"Address": "1 Broadway",
"City": "New York,
"State": "NY",
"_cryptoevidence": ***,
}
Upon read
Upon insert
find_history_ledger({“First name”: “Jane”, “Last name”: “Hill”})
verify_history({“First name”: “Jane”, “Last name”: “Hill”})
insert_ledger({“First name”: “Jane”, “Last name”: “Hill”})
Not necessarily. Examples of possible options
Verify only the last version
Verify entire document history
Verify all collection documents (excluding history)
Verify all collection documents and their history
#MDBLocal
Conclusion
Using MongoDB Transactions to Implement Cryptographically Verifiable
Change History
• while preserving MongoDB interface that developers love
Feedback and discussion
• Would a similar functionality in a new product address and simplify your data
integrity needs?
• Would you rather see enhancements in existing auditing?
• Help us build the roadmap!
• Send an email to customer-security-working-group@mongodb.com with the subject “JOIN”
to be added to our security focused customer working group.
#MDBlocal
Using Transactions to
Implement Cryptographically
Verifiable Change History in
MongoDB
https://www.surveymonkey.com/r/3RNLJ2L
Every session you rate enters you into a drawing for a $250
Visa gift card, sponsored by

More Related Content

What's hot

Addressing Your Backup Needs Using Ops Manager and Atlas
Addressing Your Backup Needs Using Ops Manager and AtlasAddressing Your Backup Needs Using Ops Manager and Atlas
Addressing Your Backup Needs Using Ops Manager and Atlas
MongoDB
 
[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design
[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design
[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design
MongoDB
 
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
MongoDB
 
MongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDB
MongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDBMongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDB
MongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDB
MongoDB
 
MongoDB .local Chicago 2019: MongoDB – Powering the new age data demands
MongoDB .local Chicago 2019: MongoDB – Powering the new age data demandsMongoDB .local Chicago 2019: MongoDB – Powering the new age data demands
MongoDB .local Chicago 2019: MongoDB – Powering the new age data demands
MongoDB
 
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demandsMongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
MongoDB
 
MongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB ChartsMongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
MongoDB
 
MongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQL
MongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQLMongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQL
MongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQL
MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?
MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?
MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?
MongoDB
 
MongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQL
MongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQLMongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQL
MongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQL
MongoDB
 
Accelerating a Path to Digital With a Cloud Data Strategy
Accelerating a Path to Digital With a Cloud Data StrategyAccelerating a Path to Digital With a Cloud Data Strategy
Accelerating a Path to Digital With a Cloud Data Strategy
MongoDB
 
MongoDB Atlas Workshop - Singapore
MongoDB Atlas Workshop - SingaporeMongoDB Atlas Workshop - Singapore
MongoDB Atlas Workshop - Singapore
Ashnikbiz
 
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep DiveMongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB
 
Webinar: Introducing the MongoDB Connector for BI 2.0 with Tableau
Webinar: Introducing the MongoDB Connector for BI 2.0 with TableauWebinar: Introducing the MongoDB Connector for BI 2.0 with Tableau
Webinar: Introducing the MongoDB Connector for BI 2.0 with Tableau
MongoDB
 
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDBMongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB
 
[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data
[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data
[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data
MongoDB
 
MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...
MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...
MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...
MongoDB
 

What's hot (20)

Addressing Your Backup Needs Using Ops Manager and Atlas
Addressing Your Backup Needs Using Ops Manager and AtlasAddressing Your Backup Needs Using Ops Manager and Atlas
Addressing Your Backup Needs Using Ops Manager and Atlas
 
[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design
[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design
[MongoDB.local Bengaluru 2018] Jumpstart: Introduction to Schema Design
 
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
 
MongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDB
MongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDBMongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDB
MongoDB .local Munich 2019: A Complete Methodology to Data Modeling for MongoDB
 
MongoDB .local Chicago 2019: MongoDB – Powering the new age data demands
MongoDB .local Chicago 2019: MongoDB – Powering the new age data demandsMongoDB .local Chicago 2019: MongoDB – Powering the new age data demands
MongoDB .local Chicago 2019: MongoDB – Powering the new age data demands
 
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demandsMongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
 
MongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local Munich 2019: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB ChartsMongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
 
MongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQL
MongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQLMongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQL
MongoDB .local London 2019: Managing Diverse User Needs with MongoDB and SQL
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?
MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?
MongoDB Evenings Minneapolis: MongoDB is Cool But When Should I Use It?
 
MongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQL
MongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQLMongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQL
MongoDB .local Munich 2019: Managing a Heterogeneous Stack with MongoDB & SQL
 
Accelerating a Path to Digital With a Cloud Data Strategy
Accelerating a Path to Digital With a Cloud Data StrategyAccelerating a Path to Digital With a Cloud Data Strategy
Accelerating a Path to Digital With a Cloud Data Strategy
 
MongoDB Atlas Workshop - Singapore
MongoDB Atlas Workshop - SingaporeMongoDB Atlas Workshop - Singapore
MongoDB Atlas Workshop - Singapore
 
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep DiveMongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
 
Webinar: Introducing the MongoDB Connector for BI 2.0 with Tableau
Webinar: Introducing the MongoDB Connector for BI 2.0 with TableauWebinar: Introducing the MongoDB Connector for BI 2.0 with Tableau
Webinar: Introducing the MongoDB Connector for BI 2.0 with Tableau
 
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDBMongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
 
[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data
[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data
[MongoDB.local Bengaluru 2018] The Path to Truly Understanding Your MongoDB Data
 
MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...
MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...
MongoDB Europe 2016 - Who’s Helping Themselves To Your Data? Demystifying Mon...
 

Similar to MongoDB .local Chicago 2019: Using MongoDB Transactions to Implement Cryptographically Verifiable Change History in MongoDB

Single View of the Customer
Single View of the Customer Single View of the Customer
Single View of the Customer MongoDB
 
How Retail Banks Use MongoDB
How Retail Banks Use MongoDBHow Retail Banks Use MongoDB
How Retail Banks Use MongoDB
MongoDB
 
Mobility: It's Time to Be Available for HER
Mobility: It's Time to Be Available for HERMobility: It's Time to Be Available for HER
Mobility: It's Time to Be Available for HER
MongoDB
 
MongoDB Mobile
MongoDB Mobile MongoDB Mobile
MongoDB Mobile
MongoDB
 
Mongo at Sailthru (MongoNYC 2011)
Mongo at Sailthru (MongoNYC 2011)Mongo at Sailthru (MongoNYC 2011)
Mongo at Sailthru (MongoNYC 2011)
ibwhite
 
Web Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure Chest
Web Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure ChestWeb Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure Chest
Web Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure Chest
Axiell ALM
 
Serverless Evolution during 3 years of Serverless Toronto
Serverless Evolution during 3 years of Serverless TorontoServerless Evolution during 3 years of Serverless Toronto
Serverless Evolution during 3 years of Serverless Toronto
Daniel Zivkovic
 
MongoDB.local Berlin: MongoDB Mobile
MongoDB.local Berlin: MongoDB MobileMongoDB.local Berlin: MongoDB Mobile
MongoDB.local Berlin: MongoDB Mobile
MongoDB
 
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
MongoDB
 
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB
 
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB Mobile: Bringing the Power of MongoDB to Your DeviceMongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB
 
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
MongoDB
 
MongDB Mobile: Bringing the Power of MongoDB to Your Device
MongDB Mobile: Bringing the Power of MongoDB to Your DeviceMongDB Mobile: Bringing the Power of MongoDB to Your Device
MongDB Mobile: Bringing the Power of MongoDB to Your Device
Matt Lord
 
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB
 
How Insurance Companies Use MongoDB
How Insurance Companies Use MongoDB How Insurance Companies Use MongoDB
How Insurance Companies Use MongoDB
MongoDB
 
How Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDBHow Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDB
MongoDB
 
MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...
MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...
MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...
MongoDB
 
Development Trends - What's New in the World of Web Development
Development Trends - What's New in the World of Web DevelopmentDevelopment Trends - What's New in the World of Web Development
Development Trends - What's New in the World of Web Development
Dan Wahlin
 
MongoDB.local Austin 2018: Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
MongoDB.local Austin 2018:  Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...MongoDB.local Austin 2018:  Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
MongoDB.local Austin 2018: Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
MongoDB
 
[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote
MongoDB
 

Similar to MongoDB .local Chicago 2019: Using MongoDB Transactions to Implement Cryptographically Verifiable Change History in MongoDB (20)

Single View of the Customer
Single View of the Customer Single View of the Customer
Single View of the Customer
 
How Retail Banks Use MongoDB
How Retail Banks Use MongoDBHow Retail Banks Use MongoDB
How Retail Banks Use MongoDB
 
Mobility: It's Time to Be Available for HER
Mobility: It's Time to Be Available for HERMobility: It's Time to Be Available for HER
Mobility: It's Time to Be Available for HER
 
MongoDB Mobile
MongoDB Mobile MongoDB Mobile
MongoDB Mobile
 
Mongo at Sailthru (MongoNYC 2011)
Mongo at Sailthru (MongoNYC 2011)Mongo at Sailthru (MongoNYC 2011)
Mongo at Sailthru (MongoNYC 2011)
 
Web Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure Chest
Web Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure ChestWeb Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure Chest
Web Browser Controls in Adlib: The Hidden Diamond in the Adlib Treasure Chest
 
Serverless Evolution during 3 years of Serverless Toronto
Serverless Evolution during 3 years of Serverless TorontoServerless Evolution during 3 years of Serverless Toronto
Serverless Evolution during 3 years of Serverless Toronto
 
MongoDB.local Berlin: MongoDB Mobile
MongoDB.local Berlin: MongoDB MobileMongoDB.local Berlin: MongoDB Mobile
MongoDB.local Berlin: MongoDB Mobile
 
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
 
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
 
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB Mobile: Bringing the Power of MongoDB to Your DeviceMongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
 
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
 
MongDB Mobile: Bringing the Power of MongoDB to Your Device
MongDB Mobile: Bringing the Power of MongoDB to Your DeviceMongDB Mobile: Bringing the Power of MongoDB to Your Device
MongDB Mobile: Bringing the Power of MongoDB to Your Device
 
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
 
How Insurance Companies Use MongoDB
How Insurance Companies Use MongoDB How Insurance Companies Use MongoDB
How Insurance Companies Use MongoDB
 
How Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDBHow Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDB
 
MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...
MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...
MongoDB World 2018: Data Models for Storing Sophisticated Customer Journeys i...
 
Development Trends - What's New in the World of Web Development
Development Trends - What's New in the World of Web DevelopmentDevelopment Trends - What's New in the World of Web Development
Development Trends - What's New in the World of Web Development
 
MongoDB.local Austin 2018: Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
MongoDB.local Austin 2018:  Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...MongoDB.local Austin 2018:  Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
MongoDB.local Austin 2018: Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
 
[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote
 

More from MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB
 
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDBMongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB
 

More from MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
 
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDBMongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
 

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 

MongoDB .local Chicago 2019: Using MongoDB Transactions to Implement Cryptographically Verifiable Change History in MongoDB

  • 1. @ #MDBlocal Salman Baset Product Security salman_baset Using MongoDB Transactions to Implement Cryptographically Verifiable Change History
  • 3. #MDBLocal Drug Development Long and complex process End goal: drug released is “safe” for usage. Preclinical* Clinical (trials)* Stage 1 Stage 2 Stage 2 Stage N Phase I Phase II Phase III Phase N ** https://www.cleardata.com/wp-content/uploads/2018/01/GxP_Brochure_FINAL.pdf Icons made by Freepik from www.flaticon.com * Illustration of preclinical or clinical timelines.
  • 4. #MDBLocal Drug Development Long and complex process End goal: drug released is “safe” for usage. Preclinical* Clinical (trials)* Stage 1 Stage 2 Stage 2 Stage N Phase I Phase II Phase III Phase N ** https://www.cleardata.com/wp-content/uploads/2018/01/GxP_Brochure_FINAL.pdf Icons made by Freepik from www.flaticon.com Good Practices (GxP) regulations for drug development (US, FDA), and include** ● Traceability: reconstruct development history of drug ● Data integrity: avoid data manipulation and breaches * Illustration of preclinical or clinical timelines.
  • 5. #MDBLocal Drug Development Long and complex process End goal: drug released is “safe” for usage. Preclinical* Clinical (trials)* Stage 1 Stage 2 Stage 2 Stage N Phase I Phase II Phase III Phase N ** https://www.cleardata.com/wp-content/uploads/2018/01/GxP_Brochure_FINAL.pdf Icons made by Freepik from www.flaticon.com Good Practices (GxP) regulations for drug development (US, FDA), and include** ● Traceability: reconstruct development history of drug ● Data integrity: avoid data manipulation and breaches * Illustration of preclinical or clinical timelines. Could you as a developer record drug development history in an easy way for reconstruction? Could you as a developer implement measures (e.g., cryptographic verification) for detecting data manipulation?
  • 6. #MDBLocal Banking Transaction 1. Visit ATM. 2. Check balance. 3. Withdraw $20. 4. Get a paper receipt of remaining $80 balance. $100 $80 $80 Icons made by ultimatearm and Vectors Market from www.flaticon.com ATM
  • 7. #MDBLocal Banking Transaction 1. Visit ATM. 2. Check balance. 3. Withdraw $20. 4. Get a paper receipt of remaining $80 balance. $100 $80 $80 1. Visit bank website. 2. Check balance. 3. Transfer $20. 4. Get an email of transaction and screenshot of remaining balance. $100 $80 Icons made by ultimatearm and Vectors Market from www.flaticon.com ATM Online
  • 8. #MDBLocal Banking Transaction 1. Visit ATM. 2. Check balance. 3. Withdraw $20. 4. Get a paper receipt of remaining $80 balance. $100 $80 $80 1. Visit bank website. 2. Check balance. 3. Transfer $20. 4. Get an email of transaction and screenshot of remaining balance. $100 $80 Icons made by ultimatearm and Vectors Market from www.flaticon.com ATM Online Are two transactions equivalent? Are two “confirmations” equivalent?
  • 9. #MDBLocal Banking Transaction 1. Visit ATM. 2. Check balance. 3. Withdraw $20. 4. Get a paper receipt of remaining $80 balance. $100 $80 $80 1. Visit bank website. 2. Check balance. 3. Transfer $20. 4. Get an email of transaction and screenshot of remaining balance. $100 $80 Icons made by ultimatearm and Vectors Market from www.flaticon.com ATM Online Are two transactions equivalent? Are two “confirmations” equivalent? Could there be a digital receipt (with cryptographic verification) of your transaction and balance when you logout of the website?
  • 10. #MDBLocal Outline - Using MongoDB Transactions to Implement Cryptographically Verifiable Change History • Goals • What is change history? • Demo of a proof-of-concept • What is cryptographically verifiable change history? • Discussion and feedback
  • 11. #MDBLocal Two Goals (1) Describe • Using MongoDB Transactions to Implement Cryptographically Verifiable Change History • while preserving MongoDB MQL and API interface
  • 12. #MDBLocal Two Goals (1) Describe • Using MongoDB Transactions to Implement Cryptographically Verifiable Change History • while preserving MongoDB MQL and API interface (2) Feedback and discussion • Would a similar functionality in a new product address and simplify your data integrity needs? • Would you rather see enhancements in existing auditing? • Help us build the roadmap! • Send an email to customer-security-working-group@mongodb.com with the subject “JOIN” to to get involved, or fill out the survey: https://www.surveymonkey.com/r/3RNLJ2L
  • 13. #MDBLocal What is Change History? Informally - History of change for an entity, going back to some “reference origin”
  • 14. #MDBLocal Why is Change History Needed? • To meet application data integrity requirements (e.g., drug development, crypto exchanges, HR) • To meet information security and compliance requirements (e.g., did someone tamper with the stored data) These requirements are not mutually exclusive.
  • 15. #MDBLocal Why is Change History Needed? (focus of this talk) • To meet application data integrity requirements (e.g., drug development, crypto exchanges, HR) • To meet information security and compliance requirements
  • 16. #MDBLocal What is Change History in a Database Context? • Change = CUD (create, update, delete)
  • 17. #MDBLocal What is Change History in a Database Context? • Change = CUD (create, update, delete) • What about read?
  • 18. #MDBLocal Application Change History != Database Auditing • Audit logs are stored in files • Not easy to get document change history from audit files • e.g., getDocHistory(_id)
  • 19. #MDBLocal Example Scenario for Change History Icon credit flaticon.com ● A (financial) website is required to show user all changes they have made to their account (e.g., address or name updates). The most recent user information should be visible within each site web page. ● The financial website stores all historical information in MongoDB 1. Update my info 4. Updated 2. Update in DB 3. Updated Financial website
  • 20. #MDBLocal Example Scenario for Change History { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York", "State": "NY" } 1. User passes their information to a website, which stores it as MongoDB document 2. User updates their address { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL" } 3. User wants to see previous updates to its address (e.g., its a credit application) How to implement it?
  • 21. #MDBLocal Options for Implementing Change History Relevant links http://www.askasya.com/post/trackversions/ http://www.askasya.com/post/revisitversions/ • Many, e.g., • Store a full copy of the document upon change • Within the same document • As a new document in the same collection • As a new document in a separate collection • Store deltas } may need atomic updates (e.g., MongoDB Transaction)
  • 22. #MDBLocal Options for Implementing Change History • Many, e.g., • Store a full copy of the document upon change • Within the same document • Document size limitation*, query complexity (for historic data) • As a new document in the same collection • As a new document in a separate collection • Store deltas * https://docs.mongodb.com/manual/reference/limits/
  • 23. #MDBLocal Options for Implementing Change History • Many, e.g., • Store a full copy of the document upon change • Within the same document • As a new document in the same collection • query complexity and speed, e.g., for current version. how to link current version with previous version? multiple documents to update? • As a new document in a separate collection • Store deltas
  • 24. #MDBLocal Options for Implementing Change History • Many, e.g., • Store a full copy of the document upon change • Within the same document • As a new document in the same collection • As a new document in a separate collection (RECOMMENDED) • how to link current version with previous version? multiple documents to update? • Store deltas
  • 25. #MDBLocal Demo POC { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, "_cryptoevidence": ***, } { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York, "State": "NY", "_cryptoevidence": ***, } Update document Insert db.customers.insert_one_ledger({“_id”: doc_id, “First name”: “Jane”, “Last name”: “Hill”, “State”: “IL”, ...}) doc_id = db.customers.insert_one_ledger({“First name”: “Jane”, “Last name”: “Hill”, “State”, “NY”, ...}) Source code of demo available @ https://github.com/salmanbaset/mdb_ledger Verify document db.customers.verify_one_ledger({“_id”: doc_id}) Delete document db.customers.delete_one_ledger({“_id”: doc_id}) customers customers_history
  • 26. #MDBLocal DIY: Use separate collections for current and historical data { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York", "State": "NY", "Timestamp": TS } { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": $$now, } db.col.find_one_and_update() db.col_history.find() Explicit separate collection maintenance in application code. Update db.col_history.insert_one() db.col.find() ● programmer_code.update({"First name": "Jane", "Last name": "Hill"}, { $set: {"Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL"}}) ○ Transaction ■ olddoc = db.col.findOneAndUpdate() ■ db.col_history.insert_one(olddoc) ● programmer_code.find({"First name": "Jane", "Last name": "Hill"}) ○ db.col.find() ● programmer_code.find_history({"First name": "Jane", "Last name": "Hill"}) ○ db.col_history.find() Find history Current doc New doc
  • 27. #MDBLocal Want something more familiar? Create a collection as a ‘ledger’, and use existing driver functions as is (1/3)* ● db.create_collection({flags: ledger}) { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York", "State": "NY", "Timestamp": TS } { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, } Current doc New doc * This is an idea. Discuss towards the end.
  • 28. #MDBLocal Want something more familiar? Create a collection as ‘ledger’, and use existing driver functions as is (2/3)* ● db.create_collection({flags: ledger}) ● db.col.update_one({"First name": "Jane", "Last name": "Hill"}, { $set: {"Address": "1 ● Michigan Avenue", "City": "Chicago", "State": "IL"}}) - If updating an existing document, it inserts the existing document in a “history” collection and updates the existing document. ● db.col.find_one({"First name": "Jane", "Last name": "Hill"}) { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York", "State": "NY", "Timestamp": TS } { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, } Current doc New doc * This is an idea. Discuss towards the end.
  • 29. #MDBLocal Want something more familiar? Create a collection as ‘ledger’, and use existing driver functions as is (3/3)* ● db.create_collection({flags: ledger}) ● db.col.update_one({"First name": "Jane", "Last name": "Hill"}, { $set: {"Address": "1 ● Michigan Avenue", "City": "Chicago", "State": "IL"}}) - If updating an existing document, it inserts the existing document in a “history” collection and updates the existing document. ● db.col.find_one({"First name": "Jane", "Last name": "Hill"}) ● db.col.find_one_history({"First name": "Jane", "Last name": "Hill"}) <= NEW FUNCTION { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York", "State": "NY", "Timestamp": TS } { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, } Current doc New doc * This is an idea. Discuss towards the end.
  • 30. #MDBLocal Are we done? • If all you wanted was to store and maintain change history for a document in MongoDB, the above operations might all be you need. • Use MongoDB Transactions to Implement Change History • Talk title: Use MongoDB Transactions to Implement Cryptographically Verifiable Change History
  • 31. #MDBLocal What is Cryptographic Verification and Why is it Needed? Informally • If a single document has been inserted, updated, or deleted, a “user” wants to verify that the document (or its history) has not been manipulated (e.g., upon retrieval). Benefits • Enhanced data integrity for applications.
  • 32. #MDBLocal Example Scenario for Cryptographic Verification Icon made by Dave Gandy from flaticon.com ● Steps 1-5 (above picture): A (financial) user adds or updates their information in the website. The website returns crypto-evidence of their information (e.g., in the form of QR code) to the end user, which the user stores in their mobile wallet. ● On subsequent logins, the user can use the QR code to validate that the information it provided previously matches the one returned by the website. 1. Update my info 4. Updated and returns QR code of crypto evidence as a digital receipt 2. Update in DB 3. Updated. crypto evidence of inserted information 5. stored in digital wallet
  • 33. #MDBLocal Who is the user, what is the manipulation? Who is the “user”? • Developer: uses MongoDB for storing and retrieving documents • Application user: uses a website to store and retrieve information. The website uses MongoDB. Who can manipulate the change history? • DBA • Developer • Application user • Malicious actor • ...
  • 34. #MDBLocal Manipulation Example { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "ID", "Timestamp": now, } { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New Jersey, "State": "NY", } Manipulated HistoryManipulated Current
  • 35. #MDBLocal What is Cryptographic Verification? - Example using Hashing { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, "_cryptoevidence": ***, } { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York, "State": "NY", "_cryptoevidence": ***, } HistoryCurrent "_cryptoevidence" = SHA256(JSON.stringify({ "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York, "State": "NY", })) "_cryptoevidence" = SHA256(JSON.stringify({ "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, }) + ) Implementation detail: Keys in JSON document should be sorted before crypto evidence computation (e.g., hashing)
  • 36. #MDBLocal When can Cryptographic Verification be performed? { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, "_cryptoevidence": ***, } { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York, "State": "NY", "_cryptoevidence": ***, } Upon read Upon insert find_history_ledger({“First name”: “Jane”, “Last name”: “Hill”}) verify_history({“First name”: “Jane”, “Last name”: “Hill”}) insert_ledger({“First name”: “Jane”, “Last name”: “Hill”, ...}) - fail inserts if tampering detected (e.g., in previous document version or all previous document versions)
  • 37. #MDBLocal Is Cryptographic Verification over a Single Document History? { "First name": "Jane", "Last name": "Hill", "Address": "1 Michigan Avenue", "City": "Chicago", "State": "IL", "Timestamp": now, "_cryptoevidence": ***, } { "First name": "Jane", "Last name": "Hill", "Address": "1 Broadway", "City": "New York, "State": "NY", "_cryptoevidence": ***, } Upon read Upon insert find_history_ledger({“First name”: “Jane”, “Last name”: “Hill”}) verify_history({“First name”: “Jane”, “Last name”: “Hill”}) insert_ledger({“First name”: “Jane”, “Last name”: “Hill”}) Not necessarily. Examples of possible options Verify only the last version Verify entire document history Verify all collection documents (excluding history) Verify all collection documents and their history
  • 38. #MDBLocal Conclusion Using MongoDB Transactions to Implement Cryptographically Verifiable Change History • while preserving MongoDB interface that developers love Feedback and discussion • Would a similar functionality in a new product address and simplify your data integrity needs? • Would you rather see enhancements in existing auditing? • Help us build the roadmap! • Send an email to customer-security-working-group@mongodb.com with the subject “JOIN” to be added to our security focused customer working group.
  • 39. #MDBlocal Using Transactions to Implement Cryptographically Verifiable Change History in MongoDB https://www.surveymonkey.com/r/3RNLJ2L Every session you rate enters you into a drawing for a $250 Visa gift card, sponsored by