【问题标题】:MongoDB: how to create an authenticated db via java driverMongoDB:如何通过 java 驱动程序创建经过身份验证的数据库
【发布时间】:2014-11-21 22:02:14
【问题描述】:

我正在尝试使用 java 驱动程序 v 2.12 在 MongoDB 2.6 中创建一个身份验证数据库。 特别是我需要创建一个访问管理员集合的用户。 有什么建议吗? 谢谢。

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    这是我的解决方案:

    MongoClient mcAdmin = new MongoClient(
                configuration.getServerAddresses(),
                Arrays.asList(MongoCredential.createMongoCRCredential(
                        MONGODB_ADMIN_USERNAME, "admin",
                        MONGODB_ADMIN_PASSWORD.toCharArray())));
        try {
            mcAdmin.setWriteConcern(WriteConcern.JOURNALED);
            DB db = mcAdmin.getDB(userDbName);
            BasicDBObject commandArguments = new BasicDBObject();
            commandArguments.put("user", userUsername);
            commandArguments.put("pwd", userPassword);
            String[] roles = { "readWrite" };
            commandArguments.put("roles", roles);
            BasicDBObject command = new BasicDBObject("createUser",
                    commandArguments);
            db.command(command);
        } finally {
            mcAdmin.close();
        }
    

    【讨论】:

      【解决方案2】:

      在 Java 代码中执行此操作并不是最好的方法,除了非常罕见的用例(为 MongoDB 编写管理应用程序)之外,即使是我会强烈反对的用例。

      安全风险

      首先,您的应用程序需要极高的权限,即管理员数据库上的userAdminAnyDatabaseuserAdmin,它们或多或少授予相同的权限:随意创建超级用户。换句话说:这段代码会有很高的安全风险。

      在数据库上授予角色和权限是一项管理任务,出于充分的理由应该将其与任意用户可访问的应用程序分离。

      技术问题

      根本不可能从客户端激活身份验证。有问题的 mongod 实例必须在启用身份验证的情况下启动。此外,您必须先保存以创建具有上述角色的用户,然后才能让您的应用程序管理用户。问题:您必须将该用户的密码存储在某处。除非您对其进行加密,否则您基本上会以明文形式存储 MongoDB 数据库和集群的最强大的密码。如果你加密它,你必须在某个时候以一种安全的方式将用于解密的密钥传递给你的应用程序。而这一切都是为了打破最佳实践(“关注点分离”)?

      【讨论】:

      • 我提供的代码正是管理界面的一部分,尤其是 java webapp。通过启用 ssl-client-side-authentication 的 https 协议保护对管理界面的访问(通过智能卡登录)。 mongoDB 管理员用户和密码不存储在任何地方,当它激活数据库创建过程时向用户请求。你仍然反对这个解决方案吗?最终您是否有建议的最佳解决方案(假设创建数据库的用户无法通过命令行直接访问 mongoDb)?
      • 彩信,新版本。包括用户管理员。减少工作量,已经启动并运行,前提是可用。
      猜你喜欢
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多