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

Connecting remotely to a MongoDB database without storing password in plaintext

我正在尝试远程连接到 MongoDB 数据库,但不想在代码中以明文形式存储数据库密码。 encrypting/decrypting 密码有什么好方法,所以有源代码的人都无法使用?源码会在GitHub.

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

最好也加密服务器的 IP 地址,因为我之前遇到过安全问题,因为代码在 GitHub 上可用,然后可能被删除了机器人。

我当前的 URI 如下所示

URI = "mongo serverip --username mongo --authenticationDatabase admin -p"

我希望以某种方式加密 IP 地址和密码,这样密码和 IP 就不会在源代码中公开。

只有一个简单的方法:

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

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

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

只要存储库还包含明显或隐藏的密钥,"encrypts"(混淆)密码的任何其他方式都是不安全的。这可以通过一些努力来解码。

罗伯特提供的所有选项都非常有意义。不过,我想再给一个:

您可以将用户名和密码存储在.bash_profile下的环境变量中,并在python.

中访问相应的环境变量

示例:- 在.bash_profile:

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

在python中:

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

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

PS:可以对.bash_profile.

中存储的密码字符串进行进一步加密