Java Mongodb:客户端用户身份验证安全问题

Java Mongodb:客户端用户身份验证安全问题,java,php,security,mongodb,mongo-java,Java,Php,Security,Mongodb,Mongo Java,我正在为我的Java客户机应用程序使用Mongodb Java驱动程序。它需要连接到远程运行的mongodb服务器 我担心有人会对jar进行反编译,找出mongodb服务器的ip地址并访问它。但是用户需要具有读写权限。我应该为每个用户创建一个数据库并对其进行身份验证吗?还是自己创建一个用户集合 mongo = new Mongo("mongodb.server", 27017); db = mongo.getDB("mydatabase");

我正在为我的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连接到中间人服务器


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

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


一般来说,人们不会直接向(不受信任的)客户机公开他们的数据库。人们可以为此目的创建REST/Remote API,其中每个应用程序功能都需要身份验证并可以授权。

身份验证应使用“admin”db完成。请改用以下方法:

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

硬编码凭证是违反安全最佳实践的,只是不要这样做。正如Scott提到的,web服务层是实现这一点的最佳方式

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