1

我正在为我的 Java 客户端应用程序使用 Mongodb Java 驱动程序。它需要连接到远程运行的 mongodb 服务器。

我担心有人可以反编译 jar 并找出 mongodb 服务器的 IP 地址并访问它。但用户需要具有读写权限。我应该为每个用户创建一个数据库并对其进行身份验证吗?还是自己创建一个用户集合?

mongo =  new Mongo("mongodb.server", 27017);
                db = mongo.getDB("mydatabase");
                db.authenticate("test", "password");

顺便说一句, db.authenticate 需要 char[] 作为密码......所以 db.authenticate() 不起作用。

我想到的另一个解决方案是使用仅连接到 mongodb 的中间人服务器。应用程序将通过 HTTP POST 连接到中间人服务器。

但是,我需要在 mongodb 上直接存储序列化为 JSON 的 Java 对象,因此使用中间人服务器会很困难。

4

3 回答 3

2

如果您将代码部署到客户端,那么您可以为每个数据库创建一个用户并让他们输入或将其作为资源包含在您的应用程序中(每个用户下载唯一)。

通常人们不会直接将他们的数据库直接暴露给他们的(不受信任的)客户。可能人们为此目的创建 REST/Remote-API,其中每个应用程序功能都需要身份验证并且可以被授权。

于 2011-06-25T17:56:45.033 回答
0

应该使用“admin”数据库进行身份验证。请改用以下内容:

mongo =  new Mongo("mongodb.server", 27017);
db = mongo.getDB("admin");
db.authenticate("test", "password");
db=mongo.getDB("mydatabase");
于 2012-05-31T02:48:14.373 回答
0

硬编码凭据违反安全最佳实践——只是不要这样做。正如 Scott 所提到的,Web 服务层是实现它的最佳方式。

我参加了一个 MongoDB 用户会议,并被告知他们正在开发第三方身份验证系统(活动目录/ldap 等)。一旦可用,您就可以使用 Windows 集成身份验证等(假设驱动程序支持它),或者至少使用 LDAP 进行密码身份验证

于 2012-08-24T08:01:05.310 回答