@@ -14,7 +14,7 @@ Encryption in your Django project.
14
14
.. admonition :: MongoDB requirements
15
15
16
16
Queryable Encryption can be used with MongoDB replica sets or sharded
17
- clusters running version 7 .0 or later. Standalone instances are not
17
+ clusters running version 8 .0 or later. Standalone instances are not
18
18
supported. The following table summarizes which MongoDB server products
19
19
support each Queryable Encryption mechanism.
20
20
@@ -51,21 +51,36 @@ encryption keys.
51
51
52
52
import os
53
53
54
- from django_mongodb_backend import parse_uri
55
54
from pymongo.encryption_options import AutoEncryptionOpts
56
55
57
56
DATABASES = {
58
- # ...
59
- " encrypted" : parse_uri(
60
- DATABASE_URL ,
61
- options = {
57
+ " default" : {
58
+ " ENGINE" : " django_mongodb_backend" ,
59
+ " HOST" : " mongodb+srv://cluster0.example.mongodb.net" ,
60
+ " NAME" : " my_database" ,
61
+ " USER" : " my_user" ,
62
+ " PASSWORD" : " my_password" ,
63
+ " PORT" : 27017 ,
64
+ " OPTIONS" : {
65
+ " retryWrites" : " true" ,
66
+ " w" : " majority" ,
67
+ " tls" : " false" ,
68
+ },
69
+ },
70
+ " encrypted" : {
71
+ " ENGINE" : " django_mongodb_backend" ,
72
+ " HOST" : " mongodb+srv://cluster0.example.mongodb.net" ,
73
+ " NAME" : " encrypted" ,
74
+ " USER" : " my_user" ,
75
+ " PASSWORD" : " my_password" ,
76
+ " PORT" : 27017 ,
77
+ " OPTIONS" : {
62
78
" auto_encryption_opts" : AutoEncryptionOpts(
63
- key_vault_namespace = " keyvault .keyvault" ,
79
+ key_vault_namespace = " encrypted .keyvault" ,
64
80
kms_providers = {" local" : {" key" : os.urandom(96 )}},
65
81
)
66
82
},
67
- db_name = " encrypted" ,
68
- ),
83
+ },
69
84
}
70
85
71
86
Configuring the ``DATABASE_ROUTERS `` setting
@@ -88,10 +103,15 @@ configure a custom router for Queryable Encryption:
88
103
Encryption.
89
104
"""
90
105
106
+ def db_for_read (self , model , ** hints ):
107
+ if model._meta.app_label == " myapp" :
108
+ return " encrypted"
109
+ return None
110
+
111
+ db_for_write = db_for_read
112
+
91
113
def allow_migrate (self , db , app_label , model_name = None , ** hints ):
92
- # The patientdata app's models are only created in the encrypted
93
- # database.
94
- if app_label == " patientdata" :
114
+ if app_label == " myapp" :
95
115
return db == " encrypted"
96
116
# Don't create other app's models in the encrypted database.
97
117
if db == " encrypted" :
0 commit comments