用安全的mongodb运送我的软件

时间:2015-04-01 10:20:50

标签: c# mongodb

所以我有一个捆绑软件,客户端可以下载和安装(在win机器上使用msi) 该软件的一部分是mongoDB数据库,用于存储客户端信息,配置等。

首次安装软件时,它会为mongoDB创建一个空文件夹,每当软件启动时,它都会启动mongod进程(使用C#的Process.Start()):mongod.exe --dbpath <path> --port <port> --quiet

我的目标是使用只有我的应用程序才知道的用户名/密码来保护mongoDB数据库。

这有助于防止从外部篡改我的客户数据,并使客户自己更难(但不是不可能,见下文)篡改应用程序的数据。
我想,一般的想法是在安装(或启动时),创建具有读/写权限的用户,我的软件将使用该权限与数据库进行通信。

所以我的问题是:
1.我如何以编程方式执行此操作?我猜this是正确的方向,但我在c# driver docs上找不到太多信息 2.我如何处理升级?即安装了以前版本软件的客户,数据库根本不安全;我想在这种情况下创建一个带密码的用户。 3.如何将应用程序用户的凭据存储在我的应用程序中?在配置文件中?但这可以由客户阅读。这里有什么最好的做法?

版本信息 - (不幸的是,由于我公司的问题,我们没有使用最新的产品版本); mongoDB 2.6,用于.net 1.5.0的mongoDB驱动程序。

谢谢!

P.S。我已经阅读了mongoDB网站上的安全部分,但是无法找到我正在尝试实现的用例的简单示例..也许我只是在这里错过了一些简单的东西..

2 个答案:

答案 0 :(得分:0)

C#驱动程序连接字符串可以接受数据库的登录凭据。 mongodb的://用户名:PWD @服务器:端口/ DBNAME

代表 mongodb的://为myuser:输入mypassword @ mydbserver:30254 / mydb的

最好的方法是将数据存储在配置文件中。如果您担心暴露它,它可以加密和存储。其他不太可能的选择是存储在资源文件中并将其作为字符串引用。

答案 1 :(得分:0)

这是一个有趣的,不寻常的用例。

首先,我想确保您了解将MongoDB与您的软件捆绑在一起的许可/版权影响。您应该查看mongo project GitHub page的许可部分,并阅读AGPL。

其次,问题最简单的部分:

  

如何将应用程序用户的凭据存储在我的应用程序中?在配置文件中?但这可以由客户阅读。这里有什么最好的做法?

这超出了MongoDB。如果用户拥有正在运行mongod进程的系统,他们可以只复制数据文件并在应用程序数据之上设置一个no-auth mongod。你不能合理地阻止他们做这样的事情,所以不要指望你的应用程序的数据对客户端用户是安全的。另外,如果您在本地安装应用程序代码,任何体面聪明且忠诚的人都应该能够从已编译的应用程序代码中提取用户名和密码。你可以努力,但并非不可能。

第三,

  

我如何以编程方式执行此操作?

根据我刚才所说的,我把“这个”用来表示

  

安装(或启动时),创建具有读/写权限的用户,我的软件将使用该权限与数据库进行通信。

不是关于让拥有安装的计算机的人安全的部分,因为这是不可能的。要做到这一点,我要么打包一个迷你数据文件来启动mongod,包括用户已经设置的那个,或者包含一个转储,你使用类似mongorestore的东西在启动后加载到mongod中。第一个选项是实现起来更简单,并且不应该要求你必须删除并重新生成mongod进程,所以试试看 - 你是否可以使用auth设置一个mongod你想要它然后通过复制数据移植用户信息文件。 FWIW,我很确定密码不是以纯文本形式存储在数据文件中(它们是盐渍的),因此您不会直接从数据文件中公开密码。

最后,

  

我如何处理升级?

您必须取下他们的mongod,使用auth重新启动它,使用localhost异常创建您需要的用户,关闭localhost异常(可选但为什么不是),然后结束该连接并启动新连接使用auth。它与安全教程中的过程相同,您只需使用C#驱动程序命令即可。请注意,在MongoDB版本之间移动也很棘手,因为随着时间的推移,seurity模型已经有所改进,因此,如果要将用户从安全2.6移动到a,则应查阅升级指南,以确保正确升级用户架构。安全3.0,比方说。