[英]How to configure MongoDB field level encryption?
我嘗試使用版本4.2中的MongoDB提供的字段級加密。 但是我有一些錯誤。
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)
然后我將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());
更新資料
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)
錯誤:
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)
錯誤:
Can't load AMD 64-bit .dll on a IA 32-bit platform
似乎應用程序正在嘗試加載“ .dll”之類的本機庫,並且該庫在PATH環境變量和java.library.path系統屬性的路徑中不存在。 請檢查在System.loadLibrary方法中傳遞的值正確,並且該庫確實存在。 此外,您可以嘗試提供該庫的絕對路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.