MongoDB用户身份验证执行操作

时间:2014-09-17 13:07:35

标签: mongodb mongodb-java

我为我的研究安装了MongoDB,我创建了DB:mydb,jobs

我创建了一个用户:

db.createUser( { user: "devdbuser", pwd: "123456", roles: [ "readWrite" ] } )

然后在我的jave代码中我正在尝试:

MongoClient client = new MongoClient(Arrays.asList(new ServerAddress[] { new ServerAddress("localhost", 27017)}),
                             Arrays.asList(new MongoCredential[] { MongoCredential.createMongoCRCredential("devdbuser", "mydb", "123456".toCharArray()) } ));

DB myDB = client.getDB("jobs"); // Here I get the jobs DB with user I created for 'mydb'

DBCollection collection = myDB.getCollection("myfirstcollection");
collection.insert((DBObject)JSON.parse("{\"name\": \"First user\", \"email\": \"first_user@mail.com\"}"));

client.close();

请注意,当我创建MongoClient时,我请求连接到'mydb'并且我为创建的用户提供凭据。 但是当我拿着作业DB并尝试将数据插入集合时,一切都运行良好。

我希望用户没有权限的错误,我错过了什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您已创建具有readWrite角色的用户devdbuser。由于devdbuser获得了read的所有权限,并且能够修改所有非系统集合的数据。

答案 1 :(得分:0)

如果您尝试使用“作业”数据库而不是“mydb”创建凭据,则身份验证将失败。

MongoClient client = new MongoClient(Arrays.asList(new ServerAddress[] { new ServerAddress("localhost", 27017)}),
    Arrays.asList(
new MongoCredential[] { MongoCredential.createMongoCRCredential("devdbuser", 
"jobs", "123456".toCharArray()) } ));

错误Stacktrace

com.mongodb.CommandFailureException: { "serverUsed" : "localhost/127.0.0.1:27017" , "ok" : 0.0 , "errmsg" : "auth failed" , "code" : 18}

基本上用户曾经在“mydb”上进行过身份验证,但对数据库中的集合具有readWrite权限