SlideShare a Scribd company logo
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Introducing…
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
db.coll.insert({
_id: 1,
name: "Doris",
ssn: "457-55-5462"
})
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
doc = db.coll.find_one({
ssn: "457-55-5462"
})
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
print (doc)
{
_id: 1
name: "Doris",
ssn: "457-55-5462"
}
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
db.coll.insert({
name: "Doris",
ssn: "457-55-5462"
})
{
insert: "coll",
documents: [{
name: "Doris",
ssn: BinData(6, "a10x…")
}]
}
You see: MongoDB sees:
Encrypt before sending
{
_id: 1
name: "Doris",
ssn: BinData(6, "a10x…")
}
Driver receives: You see:
{
_id: 1
name: "Doris",
ssn: "457-55-5462"
}
Decrypt after receiving
How does this differ from…?
•… encryption in-transit (TLS)
•… encryption at-rest (encrypted storage engine)
Attacker
Query
Client
Disk
insert write
MongoDB
Auth
db.coll.insert({ name: "Doris", ssn: "457-55-5462" })
Client
Disk
insert write
MongoDB
Attacker
Snoop
TLS
db.coll.insert({ name: "Doris", ssn: "457-55-5462" })
Client
Disk
insert write
MongoDB
Attacker
insert
TLS
db.coll.insert({ name: "Doris", ssn: "457-55-5462" })
Client
Disk
insert write
MongoDB
Attacker
Steal
ESE
db.coll.insert({ name: "Doris", ssn: "457-55-5462" })
Client
Disk
insert write
MongoDB
Attacker
Login
Client Side Encryption
db.coll.insert({ name: "Doris", ssn: "457-55-5462" })
Client
Disk
insert write
MongoDB
Boundaries of unencrypted data
Client
Disk
insert write
MongoDB
… with Encrypted Storage Engine
Client
Disk
insert write
MongoDB
… and TLS
Client
Disk
insert write
MongoDB
with Client Side Encryption
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Client
Disk
insert write
MongoDB
ssn: BinData(6, "a10x…")
db.coll.update({}, {
$set: { ssn: "457-55-5462" }
})
{
update: "coll",
updates: [{
q:{},
u: {
$set: { ssn: BinData(6, "a10x…") }
}
}]
}
You see: MongoDB sees:
Update that overwrites value
db.coll.aggregate([{
$project: { name_ssn: {$concat: [ "$name", " - ", "$ssn" ] } }
}]
Aggregate acting on the data
Find with equality query
* For deterministic encryption
db.coll.find({ssn: "457-55-5462" }) {
find: "coll",
filter: { ssn: BinData(6, "a10x…") }
}
You see: MongoDB sees:
Find with equality query
* For deterministic encryption
db.test.find(
{
$and: [
{
$or: [
{ ssn : { $in : [ "457-55-5462", "153-96-2097" ]} },
{ ssn: { $exists: false } }
]
},
{ name: "Doris" }
]
}
)
You see:
Find with equality query
* For deterministic encryption
MongoDB sees:
{
find: "coll",
filter: {
$and: [
{
$or: [
{ ssn : { $in : [ BinData(6, "a10x…"), BinData(6, "8dk1…") ]} },
{ ssn: { $exists: false } }
]
},
{ name: "Doris" }
]
}
}
MongoDB
Attacker
Login
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Doris
Private stuff in storage
PoliceDoris
Private stuff in storage
Vault key
Held only by you
Vault
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Encrypted Data
MongoDB
Encryption Key
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
{ _id: 1, ssn: BinData(0, "A81…"), name: "Kevin" }
{ _id: 2, ssn: BinData(0, "017…"), name: "Eric" }
{ _id: 3, ssn: BinData(0, "5E1…"), name: "Albert" }
…
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Destroy the key
Provably delete all user data.
GDPR "right-to-be-forgotten"
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
client = MongoClient(
auto_encryption_opts=opts)
Not sensitive
{
One key for all vaults
One key per vault
{
name: "Doris"
ssn: "457-55-5462",
email: "Doris@gmail.com",
credit_card: "4690-6950-9373-8791",
comments: [ …. ],
avatar: BinData(0, "0fi8…"),
profile: { likes: {…}, dislikes: {…} }
}
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Describes JSON
{
bsonType: "object",
properties: {
a: {
bsonType: "int"
maximum: 10
}
b: { bsonType: "string" }
},
required: ["a", "b"]
}
{
a: 5,
b: "hi"
}
{
a: 11,
b: false
}
JSON Schema
{
bsonType: "object",
properties: {
ssn: {
encrypt: { … }
}
},
required: ["ssn"]
}
JSON Schema "encrypt"
encrypt: {
keyId: <UUID[]> or <string>,
algorithm: <string>
bsonType: <string> or <string[]>
}
bsonType indicates the type of underlying data.
algorithm indicates how to encrypt (Random or Deterministic).
keyId indicates the key used to encrypt.
opts = AutoEncryptionOptions(
schema_map = { "db.coll": <schema> }
…)
Remote Schema Fallback
db.createCollection("coll", { validator: { $jsonSchema: … } } )
Misconfigured
Client insert "457-55-5462"
error, that should be
encrypted
MongoDB
What if
… the server lies about the schema?
Misconfigured
Client insert "457-55-5462"
Evil MongoDB
ok :)
schema_map
Sub-options
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Key vault
Key vault key
Held only by you
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Stores encrypted keys
opts = AutoEncryptionOptions(
schema_map = { "db.coll": <schema> },
key_vault_namespace = "db.keyvault"
…)
schema_map
Sub-options
key_vault_namespace
What if
… attacker drops key vault collection?
Keep at home
opts = AutoEncryptionOptions(
schema_map = { "db.coll": <schema> },
key_vault_namespace = "db.keyvault",
key_vault_client = <client>
…)
schema_map
Sub-options
key_vault_namespace
key_vault_client
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
(Key Management Service)
Protects keys Stores keys
KMS
Key vault key
Key vault
Key vault
collection
Decryption requires
opts = AutoEncryptionOptions(
schema_map = { "db.coll": <schema> },
key_vault_namespace = "db.keys",
kms_providers = <creds>
…)
schema_map
Sub-options
key_vault_namespace
key_vault_client
kms_providers
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
db.coll.insert({
name: "Doris",
ssn: "457-55-5462"
})
Get encrypted key
Decrypt the key with KMSDecrypt the key with KMS
Encrypt 457-55-5462
Send insert
Compare to JSON schema
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
Authenticated Encryption with Associated Data using the Advance
AEAD_AES_256_CBC_HMAC_SHA_512
Provides confidentiality + integrity
AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic
AEAD_AES_256_CBC_HMAC_SHA_512-Random
coll.insert({ ssn: "457-55-5462" }) { ssn: BinData(6, "a10x…") }
You see: MongoDB stores:
coll.insert({ ssn: "457-55-5462" }) { ssn: BinData(6, "f991…") }
…Random
coll.insert({ ssn: "457-55-5462" }) { ssn: BinData(6, "a10x…") }
You see: MongoDB stores:
coll.insert({ ssn: "457-55-5462" }) { ssn: BinData(6, "a10x…") }
…Deterministic
Can be queried
doc = db.coll.find({
ssn: "457-55-5642"
})
{
find: "coll",
filter: { ssn: BinData(0, "a10x…") }
}
Driver sends:
{ ssn: BinData(6, "a10x…") }
MongoDB returns:
…Deterministic
Only for binary comparable types.
db.coll.find({ a: { b: 1.0 } })
{ a: { b: NumberInt(1) } }
{ a: { b: 1.0 } }
{ a: { b: NumberLong(1) } }
MongoDB returns:
…Deterministic
{ a: { b: NumberInt(1) } }
{ a: { b: 1.0 } }
{ a: { b: NumberLong(1) } }
{ a: BinData(6, "19d0…") }
{ a: BinData(6, "b515…") }
{ a: BinData(6, "801f…") }
Encrypted as:
db.coll.find({ a: { b: 1.0 } })
{ a: { b: 1.0 } }
MongoDB returns:
"a" encrypted
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
{ ssn: BinData(6, "AWNkTYTCw89Ss1DPzV3/2pSRDNGNJ9NB" }
New binary subtype
Older drivers and older MongoDB will treat as a black box.
byte algorithm
byte[16] key_id
byte original_bson_type
byte* payload
Ciphertext
byte algorithm
byte[16] key_id
byte original_bson_type
byte* payload
key_id + algorithm describes how to decrypt.
No JSON Schema necessary!
Ciphertext
byte algorithm
byte[16] key_id
byte original_bson_type
byte* payload
Provides extra server-side validation.
But prohibits single-value types (MinKey, MaxKey, Undefined, Null)
Ciphertext
byte algorithm
byte[16] key_id
byte original_bson_type
byte* payload
Payload includes encoded IV and padding block, and HMAC.
Ciphertext adds between 66 to 82 bytes of overhead.
Ciphertext
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
opts = ClientEncryptionOptions(…)
ce = ClientEncryption(opts)
opts = DataKeyOpts(kms_provider="aws",
master_key="…")
key_id = ce.create_data_key(opts)
ciphertext = ce.decrypt(ciphertext)
opts = EncryptOpts(algorithm="…", key_id="…")
ciphertext = ce.encrypt("457-55-5462", opts)
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
db.test.find({
$or: [
{ ssn : { $in : [ "457-55-5462", "153-96-2097" ]} },
{ name: "Doris" }
]
})
db.test.find({
$or: [
{ ssn : { $in : [ BinData(6, "a10x…"), BinData(6, "8dk1…") ]} },
{ name: "Doris" }
]
})
Limitations
If we cannot parse…
or it is impossible…
we err for safety.
{ passport_num: "281-301-348", ssn: "457-55-5462" }
{ passport_num: "390-491-482", ssn: "482-38-5899" }
{ passport_num: "104-201-596" }
passport_num and ssn encrypted with different keys
db.test.aggregate([
])
{ $project: { identifier: { $ifNull: ["$ssn", "$passport_num" ] } } },
{ $match: { identifier: "457-55-5462" } }
How do we encrypt 457-55-5462?
opts = AutoEncryptionOptions(
bypass_auto_encryption = True
…)
client = MongoClient(auto_encryption_opts=opts)
(Decryption still occurs)
ce = ClientEncryption(opts)
db.test.aggregate([
])
{ $project: { identifier: { $ifNull: ["$ssn", "$passport_num" ] } } },
{ $match: { identifier: ce.encrypt("457-55-5462", opts) } }
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
{
_id: UUID(…)
keyAltNames: [ "mykey" ],
keyMaterial: BinData(0, "39aJ…"),
… (some metadata) …
}
> db.keyvault.find()
Identify
(Cached locally)
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
encryption = ClientEncryption(…)
id = encryption.create_data_key(…)
print (id)
Script prints: "609"
{
_id: 23
email: "Doris@gmail.com",
pwd: "19dg8%"
following: [ 9, 20, 95 ]
}
…
"email": {
"encrypt": {
"keyId": 609,
"algorithm": "…Deterministic"
"bsonType": "string",
}
},
"pwd": {
"encrypt": {
"keyId": 609,
"algorithm": "…Random"
"bsonType": "string"
}
}
…
client = MongoClient(
auto_encryption_opts=opts)
def register(db, email, pwd):
db.users.insert_one({ "email": email, "pwd": pwd })
def login(db, email, pwd):
user = db.users.find_one({ "email": email })
if user and matches(user["pwd"], pwd):
return True
else:
return False
client = MongoClient()
for doc in client.db.users.find():
print doc
{
_id: 23
email: BinData(6, 810f…"),
pwd: BinData(6, "19A0…")
}
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
{
user_id: 123,
date: Date("6/8/2019"),
title: "My first entry",
body: "Dear diary, … "
}
…
"body": {
"encrypt": {
"keyId": 609,
"algorithm": "…Random",
"bsonType": "string"
}
}
…
def create_post(db, user_id, title, body):
db.posts.insert_one({
"user_id": user_id,
"date": datetime.now(),
"title": title,
"body": body
})
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
def delete_user_data(db, user_id):
db.posts.delete_many({ "user_id": user_id })
delete key
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
encryption = ClientEncryption(…)
def register(encryption, db, email, pwd):
user_id = db.users.insert_one({
"email": email,
"pwd": pwd
}).inserted_id
opts = DataKeyOpts(keyAltNames=[user_id])
encryption.create_data_key("aws", opts)
…
"body": {
"encrypt": {
"keyId": 609,
"algorithm": "…Random",
"bsonType": "string"
}
}
…
…
"body": {
"encrypt": {
"keyId": "/user_id",
"algorithm": "…Random",
"bsonType": "string"
}
}
…
{
_id: 584,
user_id: 23,
date: Date("6/8/2019"),
title: "My first entry",
body: "Dear diary, … "
}
def delete_user_data(db, user_id):
db.keyvault.delete_one({ "keyAltNames": user_id })
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
def get_follower_posts(db, user):
cursor = db.posts.find_many(
{ "user_id": { "$in": user["followers"] } },
limit = 20,
sort = { "date": DESCENDING }
)
return list(cursor)
def list_follower_posts(db, user):
cursor = db.posts.find_many(
{ "user_id": { "$in": user["followers"] } },
limit = 20,
sort = { "date": DESCENDING },
projection = { "body": False }
)
return list(cursor)
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
(used by journalists and teens)
EAST
DICTATORLAND
Users
Global Shards
EAST
DICTATORLAND
EAST
DICTATORLAND
{ _id: 1, body: BinData(6, "A81…") }
{ _id: 2, body: BinData(6, "017…") }
{ _id: 3, body: BinData(6, "5E1…") }
…
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2

More Related Content

PDF
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2
PDF
MongoDB .local Munich 2019: New Encryption Capabilities in MongoDB 4.2: A Dee...
PDF
MongoDB World 2019: Using Client Side Encryption in MongoDB 4.2 Link
PDF
MongoDB .local Munich 2019: Tips and Tricks++ for Querying and Indexing MongoDB
PDF
MongoDB .local London 2019: Using Client Side Encryption in MongoDB 4.2
PDF
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
PPTX
MongoDB San Francisco 2013: Hash-based Sharding in MongoDB 2.4 presented by B...
PDF
MongoDB Europe 2016 - Debugging MongoDB Performance
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Munich 2019: New Encryption Capabilities in MongoDB 4.2: A Dee...
MongoDB World 2019: Using Client Side Encryption in MongoDB 4.2 Link
MongoDB .local Munich 2019: Tips and Tricks++ for Querying and Indexing MongoDB
MongoDB .local London 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB San Francisco 2013: Hash-based Sharding in MongoDB 2.4 presented by B...
MongoDB Europe 2016 - Debugging MongoDB Performance

What's hot (19)

PDF
MongoD Essentials
PDF
JSON Web Tokens (JWT)
PPTX
Powering Systems of Engagement
PDF
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
PDF
Di web tech mail (no subject)
TXT
Books
PPTX
Webinar: General Technical Overview of MongoDB for Dev Teams
PDF
ChromeからMacBookのTouchIDでWebAuthenticationする ~Idance vol1~
 
KEY
Mongo db presentation
PDF
JWT - To authentication and beyond!
PDF
How to get rid of terraform plan diffs
PPTX
Cargo Cult Security UJUG Sep2015
PPTX
First app online conf
PDF
MongoDB @ Frankfurt NoSql User Group
PPTX
Mythbusting: Understanding How We Measure the Performance of MongoDB
PDF
MongoDB全機能解説2
KEY
Mapping Flatland: Using MongoDB for an MMO Crossword Game (GDC Online 2011)
PPTX
Basic crud operation
PPT
Every Click Counts (But All the Money Goes to Me)
MongoD Essentials
JSON Web Tokens (JWT)
Powering Systems of Engagement
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
Di web tech mail (no subject)
Books
Webinar: General Technical Overview of MongoDB for Dev Teams
ChromeからMacBookのTouchIDでWebAuthenticationする ~Idance vol1~
 
Mongo db presentation
JWT - To authentication and beyond!
How to get rid of terraform plan diffs
Cargo Cult Security UJUG Sep2015
First app online conf
MongoDB @ Frankfurt NoSql User Group
Mythbusting: Understanding How We Measure the Performance of MongoDB
MongoDB全機能解説2
Mapping Flatland: Using MongoDB for an MMO Crossword Game (GDC Online 2011)
Basic crud operation
Every Click Counts (But All the Money Goes to Me)
Ad

Similar to MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2 (20)

PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
PDF
MongoDB .local London 2019: Using Client Side Encryption in MongoDB 4.2
PDF
MongoDB .local Bengaluru 2019: New Encryption Capabilities in MongoDB 4.2: A ...
PDF
Achieving compliance With MongoDB Security
PDF
Navigating MongoDB's Queryable Encryption for Ultimate Security - Mydbops
PPTX
Percona Live 2021 - MongoDB Security Features
PPTX
Webinar: Architecting Secure and Compliant Applications with MongoDB
PPTX
Hacking MongoDB at RelateIQ, A Salesforce Company
PDF
MongodB Internals
PDF
Enhancing the default MongoDB Security
PPT
Webinar: Technical Introduction to Native Encryption on MongoDB
PDF
Building your first app with MongoDB
PPTX
Securing Your Deployment with MongoDB Enterprise
PPTX
MongoDB Days UK: Securing Your Deployment with MongoDB Enterprise
PPTX
Webinar: Securing your data - Mitigating the risks with MongoDB
PDF
Сергей Матвеенко: MongoEngine: NoORM for NoSQL
PPTX
Server discovery and monitoring with MongoDB
KEY
2012 phoenix mug
PPTX
Python mongo db-training-europython-2011
PPTX
Introduction to MongoDB
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local London 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Bengaluru 2019: New Encryption Capabilities in MongoDB 4.2: A ...
Achieving compliance With MongoDB Security
Navigating MongoDB's Queryable Encryption for Ultimate Security - Mydbops
Percona Live 2021 - MongoDB Security Features
Webinar: Architecting Secure and Compliant Applications with MongoDB
Hacking MongoDB at RelateIQ, A Salesforce Company
MongodB Internals
Enhancing the default MongoDB Security
Webinar: Technical Introduction to Native Encryption on MongoDB
Building your first app with MongoDB
Securing Your Deployment with MongoDB Enterprise
MongoDB Days UK: Securing Your Deployment with MongoDB Enterprise
Webinar: Securing your data - Mitigating the risks with MongoDB
Сергей Матвеенко: MongoEngine: NoORM for NoSQL
Server discovery and monitoring with MongoDB
2012 phoenix mug
Python mongo db-training-europython-2011
Introduction to MongoDB
Ad

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
PDF
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
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: 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: MongoDB Atlas Jump Start
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
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: From SQL to NoSQL -- Changing Your Mindset
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: Aggregation Pipeline Power++
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: Developing Alexa Skills with MongoDB & Golang
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: Les bonnes pratiques pour sécuriser MongoDB

Recently uploaded (20)

PDF
Empathic Computing: Creating Shared Understanding
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Spectroscopy.pptx food analysis technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Machine learning based COVID-19 study performance prediction
PPT
Teaching material agriculture food technology
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
KodekX | Application Modernization Development
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Electronic commerce courselecture one. Pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
Empathic Computing: Creating Shared Understanding
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Spectroscopy.pptx food analysis technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Network Security Unit 5.pdf for BCA BBA.
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Review of recent advances in non-invasive hemoglobin estimation
Machine learning based COVID-19 study performance prediction
Teaching material agriculture food technology
MIND Revenue Release Quarter 2 2025 Press Release
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
KodekX | Application Modernization Development
Dropbox Q2 2025 Financial Results & Investor Presentation
Electronic commerce courselecture one. Pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Spectral efficient network and resource selection model in 5G networks
Building Integrated photovoltaic BIPV_UPV.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf

MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2