远程连接到MongoDB数据库,而无需以明文形式存储密码

时间:2019-01-29 13:28:16

标签: python mongodb encryption pymongo password-protection

我正在尝试远程连接到MongoDB数据库,但不想在代码中以纯文本格式存储数据库的密码。什么是加密/解密密码的好方法,这样拥有源代码的任何人都无法使用它?源代码将在GitHub上。

我正在使用Python和PyMongo连接数据库。数据库在mongod.conf文件中启用了身份验证。该数据库托管在运行于AWS的Ubunutu 18.04实例上。

将服务器的IP地址也加密也是一件好事,因为在人们访问数据库之前,由于代码在GitHub上可用,然后大概被机器人抓取了,因此我遇到了安全问题。

我当前的URI看起来像这样

URI =“ mongo serverip --username mongo --authenticationDatabase admin -p”

我希望对IP地址和密码进行某种方式的加密,以使密码和IP在源代码中不会公开可用。

2 个答案:

答案 0 :(得分:0)

只有一种简单的方法:

如果您不希望将密码和服务器名称包含在公共存储库中,请不要将其写入推送到该存储库的文件中。

一种方法是为秘密数据创建一个配置文件,并将其添加到.gitignore文件中。在运行时,打开配置文件,从中读取机密数据并在脚本中使用它。

另一种方法是将机密数据(密码为服务器名)作为脚本的命令行参数提供。

只要存储库还包含明显或隐藏的密钥,“加密”(混淆)密码的任何其他方式都是不安全的。可以轻松解码。

答案 1 :(得分:0)

罗伯特提供的所有选项都很有意义。但是,我想再给出一个:

您可以在.bash_profile下的环境变量下存储用户名和密码,并在python中访问相应的env变量。

示例:- 在.bash_profile中:

export USRNM='myname'
export PASS='password'

在python中:

    import os
    username = os.environ.get('USRNM')
    password = os.environ.get('PASS')

这样,用户名和密码将不会出现在您的项目目录中,并且无法通过查看源代码进行访问。

PS:进一步的加密可以添加到.bash_profile中存储的密码字符串中。