简体   繁体   English

如何配置MongoDB字段级加密?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM