[英]How to configure MongoDB field level encryption?
I tried to use the field-level encryption provided by MongoDB in version 4.2. 我尝试使用版本4.2中的MongoDB提供的字段级加密。 But I got some errors. 但是我有一些错误。
Caused by: java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
at com.sun.jna.Native.open(Native Method)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:278)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)
at com.sun.jna.Native.register(Native.java:1722)
at com.mongodb.crypt.capi.CAPI.<clinit>(CAPI.java:759)
at com.mongodb.crypt.capi.MongoCryptImpl.<init>(MongoCryptImpl.java:91)
at com.mongodb.crypt.capi.MongoCrypts.create(MongoCrypts.java:36)
at com.mongodb.client.internal.Crypts.createCrypt(Crypts.java:35)
at com.mongodb.Mongo.<init>(Mongo.java:328)
at com.mongodb.Mongo.<init>(Mongo.java:313)
at com.mongodb.Mongo.<init>(Mongo.java:309)
at com.mongodb.MongoClient.<init>(MongoClient.java:328)
Then I modified jdk to 32 bits and I got another error message. 然后我将jdk修改为32位,然后又收到一条错误消息。
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\longf\AppData\Local\Temp\jna-103156074\jna6619363862608272389.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:947)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:922)
at com.sun.jna.Native.<clinit>(Native.java:190)
at com.mongodb.crypt.capi.CAPI.<clinit>(CAPI.java:759)
at com.mongodb.crypt.capi.MongoCryptImpl.<init>(MongoCryptImpl.java:91)
at com.mongodb.crypt.capi.MongoCrypts.create(MongoCrypts.java:36)
at com.mongodb.client.internal.Crypts.createCrypt(Crypts.java:35)
at com.mongodb.client.internal.MongoClientImpl.<init>(MongoClientImpl.java:70)
at com.mongodb.client.internal.MongoClientImpl.<init>(MongoClientImpl.java:61)
at com.mongodb.client.MongoClients.create(MongoClients.java:114)
at com.mongodb.client.MongoClients.create(MongoClients.java:50)
OS: Windows 10
MongoDB version: 4.2.0
mongo-java-driver: 3.11.0
mongodb-crypt: 1.0.0-beta4
System.setProperty("jna.prefix", "win32-x86-64");
final byte[] localMasterKey = new byte[96];
new SecureRandom().nextBytes(localMasterKey);
Map<String, Map<String, Object>> kmsProviders = new HashMap<String, Map<String, Object>>() {{
put("local", new HashMap<String, Object>() {{
put("key", localMasterKey);
}});
}};
String keyVaultNamespace = "admin.datakeys";
AutoEncryptionSettings autoEncryptionSettings = AutoEncryptionSettings.builder()
.keyVaultNamespace(keyVaultNamespace)
.kmsProviders(kmsProviders)
.build();
MongoClientSettings clientSettings = MongoClientSettings.builder()
.autoEncryptionSettings(autoEncryptionSettings)
.build();
MongoClient mongoClient = MongoClients.create(clientSettings);
MongoCollection<Document> collection = mongoClient.getDatabase("test").getCollection("coll");
collection.drop(); // Clear old data
collection.insertOne(new Document("encryptedField", "123456789"));
System.out.println(collection.find().first().toJson());
https://mongodb.github.io/mongo-java-driver/3.11/driver/tutorials/client-side-encryption/#mongocryptd-configuration https://mongodb.github.io/mongo-java-driver/3.11/driver/tutorials/client-side-encryption/#mongocryptd-configuration
Update 更新资料
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Error: 错误:
Caused by: java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) Client VM (build 25.221-b11, mixed mode)
Error: 错误:
Can't load AMD 64-bit .dll on a IA 32-bit platform
It seems like application is trying to load a native library like ".dll" and that library does not exist in that paths of PATH environment variable and java.library.path system property. 似乎应用程序正在尝试加载“ .dll”之类的本机库,并且该库在PATH环境变量和java.library.path系统属性的路径中不存在。 Please check the value passed in the System.loadLibrary method is correct and that the library actually exists. 请检查在System.loadLibrary方法中传递的值正确,并且该库确实存在。 Moreover you can try to provide absolute path of the library. 此外,您可以尝试提供该库的绝对路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.