我为我的研究安装了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并尝试将数据插入集合时,一切都运行良好。
我希望用户没有权限的错误,我错过了什么?
感谢您的帮助。
答案 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权限