【问题标题】:Mongodb: client side user authentication security issueMongodb:客户端用户认证安全问题
【发布时间】:2011-06-25 17:30:31
【问题描述】:

我正在为我的 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 对象存储起来,所以使用中间人服务器会很困难。

【问题讨论】:

    标签: java php security mongodb mongo-java


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-08
          • 1970-01-01
          • 2012-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-11
          • 1970-01-01
          相关资源
          最近更新 更多