登录
首页 >  Golang >  Go问答

字段级加密在Golang中应用的MongoDB

来源:stackoverflow

时间:2024-03-13 09:09:26 440浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《字段级加密在Golang中应用的MongoDB》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我正在尝试使用 mgo 和 golang 加密 mongodb 中的某些字段。由于mongodb不支持字段级加密,所以我考虑在编组数据和解组数据时对数据进行加密和解密。

例如,在下面的结构中我想加密姓名和性别

如果我的结构是这样的

type User struct {
UserID      string `json:"userID,omitempty" bson:"userID,omitempty"`
UserName    string `json:"userName,omitempty" bson:"userName,omitempty"`
UserAge   string `json:"userAge,omitempty" bson:"userAge,omitempty"`
UserGender string `json:"userGender,omitempty" bson:"userGender,omitempty"`
}

解决此问题的一种方法是在编组数据后,在保存到数据库之前对数据进行加密,并使用类似的方法将数据发送回 ui。在数据编组和解组之前我可以监听一个事件吗?或者有更好的方法吗?


解决方案


由于mongodb不支持字段级加密

mongodb v4.2 现在支持 Client-Side Field Level Encryption,另请参阅 Field Level Encryption is GA。有两种支持的类型:

根据您的要求,您似乎需要 automatic 加密/解密。您可以使用 free-tier atlas 集群尝试此操作,请参阅:Getting Started with Atlas

使用 mgo 和 golang 加密 mongodb 中的某些字段

不幸的是,这在 mgo 上不可用,但在 mongo-go-driver v1.2+ 上可用。您可以在 MongoDB Go driver: Client Side Encryption 上看到一些示例。创建配置自动加密的 mongoclient 的示例是:

func createEncryptedClient() *mongo.Client {
        // create a client with auto encryption
        schemaMap := map[string]interface{}{
                "foo.bar": readJSONFile("collection_schema.json"),
        }
        autoEncOpts := options.AutoEncryption().
                SetKeyVaultNamespace("keyvault.__datakeys").
                SetKmsProviders(kmsProviders).
                SetSchemaMap(schemaMap)

        clientOpts := options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncOpts)
        autoEncryptionClient, err := mongo.Connect(ctx, clientOpts)
        if err != nil {
                log.Fatalf("Connect error for client with automatic encryption: %v", err)
        }
        return autoEncryptionClient
}

另请参阅 github.com/mongodb-labs/field-level-encryption-sandbox

今天关于《字段级加密在Golang中应用的MongoDB》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>