我使用Java驱动程序2.11.1遇到MongoDB用户身份验证问题。我在管理数据库中添加了一些管理员用户(dbAdmins,userAdmins等)。
正如MongoDB教程所建议的,我只使用MongoClient对象的一个实例:它实现为单例,因为MongoClient对象就像一个连接池。
如果管理员想要访问数据库,他将使用全局MongoClient实例建立与数据库的新连接(从池中获取一个连接)并调用驱动程序的身份验证方法:示例:< / p>
MongoClient mongoClient = new MongoClient("ip", "port");
DB adminDB = mongoClient.getDB("admin");
boolean isAuth = adminDB.authenticate("Admin", "Admin1234".toCharArray());
DB anotherAdminDB = mongoClient.getDB("admin");
boolean isAuth2 = anotherAdminDB.authenticate("UserAdmin", "UserAdmin1234".toCharArray());
如果我这样做,我将获得例外:
java.lang.IllegalStateException:无法在同一个身份验证两次 数据库
但是每个管理员用户都必须使用自己的凭据进行身份验证。有人有这个问题吗?你怎么能解决这个问题?
如果我为每个管理员创建一个新的MongoClient,那么就不会抛出任何异常,一切都是正确的。但后来我无法使用Mongo的连接池。
谢谢你,并致以最诚挚的问候。
答案 0 :(得分:0)
我认为这种限制是设计的。也许mongodb身份验证在应用程序的上下文中更合适&lt; - &gt;数据库,而不是来自用户&lt; - &gt;应用。如果您需要验证用户对应用程序的访问权限,最好自己实现它(例如:使用Java EE / Spring Security)