2011-06-25 74 views
1

我为我的Java客户端应用程序使用了Mongodb Java驱动程序。它需要连接到远程运行的mongodb服务器。Mongodb:客户端用户认证安全问题

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

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

顺便说一句,该db.authenticate需要炭[]作为密码....使得db.authenticate()不工作。

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

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

回答

2

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

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

0

验证应该用“admin”db完成。请改为使用以下内容:

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

对硬编码凭证进行编码是违反安全最佳实践的,只是不这样做。像Scott提到的那样,Web服务层是最好的方式。

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