Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未授权使用eclipse查询mongodb上的databasename.collection_Java_Eclipse_Mongodb_Authentication - Fatal编程技术网

Java 未授权使用eclipse查询mongodb上的databasename.collection

Java 未授权使用eclipse查询mongodb上的databasename.collection,java,eclipse,mongodb,authentication,Java,Eclipse,Mongodb,Authentication,我给DB PUPP指定的角色是UserAdmin,我使用mongod--auth--dbpath c:\mongodb\data\DB运行服务器。 首先,我在eclipse中创建了一个java文件来连接DB,它工作正常 在eclipse中创建并运行以下文件后: try { MongoClient mongoClient = new MongoClient("localhost", 27017); DB db = mongoClient.getDB("purplista");

我给DB PUPP指定的角色是UserAdmin,我使用
mongod--auth--dbpath c:\mongodb\data\DB
运行服务器。 首先,我在eclipse中创建了一个java文件来连接DB,它工作正常

在eclipse中创建并运行以下文件后:

try {

    MongoClient mongoClient = new MongoClient("localhost", 27017);
    DB db = mongoClient.getDB("purplista");
    boolean auth =db.authenticate("purp","123".toCharArray());
    System.out.println("Connect to database successfully");

    DBCollection doc = db.getCollection("test");
    System.out.println("Collection test selected successfully..");

    DBCursor cursor = doc.find();
    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }
   }  catch (Exception e) {
e.printStackTrace();
}

出现如下错误:

成功连接到数据库

已成功选择收集测试

com.mongodb.MongoException:未授权查询purplista.test 在 com.mongodb.queryResulterator.throwOnQueryFailure(queryResulterator.java:214) 位于com.mongodb.queryResulterator.init(queryResulterator.java:198) 在 com.mongodb.queryResulterator.initFromQueryResponse(queryResulterator.java:176) 在 QueryResulterator.java:64) 位于com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:80) com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:61)位于 com.mongodb.DBCursor.\u检查(DBCursor.java:458) com.mongodb.DBCursor.\u hasNext(DBCursor.java:546)位于 hasNext(DBCursor.java:571)位于 purplista.FindDoc.main(FindDoc.java:34)


我看到的几个问题是:

  • 您没有检查db.authenticate()的返回值,如果db.authenticate()无法进行身份验证,则返回值可能为false
  • 即使经过身份验证,您也可能没有在指定数据库上执行预期操作(在您的情况下为read)的适当权限
  • 需要检查的几件事:

  • 这是有效的用户/密码吗?可以使用 相同的凭证
  • 如果有效,它是否对您正在使用的数据库具有适当的权限?由于您可以在“admin”数据库中创建可用于身份验证的用户,但是这些用户可能不会设置为您的操作所需的其他访问权限
  • 如果您使用的是MongoDB v2.6,则所有用户都必须位于“admin”数据库中
  • 您可以在感兴趣的数据库(test)和管理数据库下检查“system.users”集合,以检查用户的设置位置

  • 看起来您没有进行身份验证。你添加用户了吗?您的mongoDb可能正在运行安全模式。只需使用布尔auth=db.authenticate(“db”,“password”.toCharArray())进行检查;