Java MongoDB-命令失败,错误代码13`未经****授权执行此命令`

Java MongoDB-命令失败,错误代码13`未经****授权执行此命令`,java,mongodb,mlab,Java,Mongodb,Mlab,所以出于某种奇怪的原因,我的用户没有被授权在krimson数据库中写入任何内容。数据库连接已成功,但授予用户写入数据库的权限未按预期工作 完全错误 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on krimson to execute command { findandmodify: "users", query: { _id: "_id" }, field

所以出于某种奇怪的原因,我的用户没有被授权在krimson数据库中写入任何内容。数据库连接已成功,但授予用户写入数据库的权限未按预期工作

完全错误

Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on krimson to execute command { findandmodify: "users", query: { _id: "_id" }, fields: {}, sort: {}, new: true, upsert: true, update: { $i
nc: { _id: 1 } } }' on server ds037395.mongolab.com:37395. The full response is { "ok" : 0.0, "errmsg" : "not authorized on krimson to execute command { findandmodify: \"users\", query: { _id: \"_id\" }, fields: {}, sort: {}, new:
 true, upsert: true, update: { $inc: { _id: 1 } } }", "code" : 13 }
连接代码

    public static void connects(String ip, int port, String database, String username, String password) {
    try {
        client = new MongoClient(ip, port); /**Creating our connection between server & MongoDB*/
        krimson = client.getDB(database); /**Checks if the database exists or not if not then create a new one*/

        MongoCredential.createCredential(username, database, password.toCharArray()); /**Credentials used to connect to MongoDB*/

    } catch (Exception e){
        e.printStackTrace();
        System.out.println("Linking connections failed"); /**Outputs when the database cannot connect*/
        UtilServer.broadcast("&c&lThe Krimson Library did not establish a successfully connection.");
    }

    users = krimson.getCollection("users");

}

我试着在凭证中重新创建用户和声誉,看看这是否是问题所在,事实并非如此我现在正在使用MongoLab。因此,我想知道这是否可能是问题之一,或者我是否需要在MongoLab中手动分配用户管理员角色的特定方式

您需要在mongo shell中授予用户帐户的写访问权限:

use krimson
db.grantRolesToUser(
    "reportsUser",
    [
      { role: "write", db: "krimson" }
    ]
 )

我也面临着同样的错误

所以我尝试了下面的代码,它对我很有效

MongoCredential credential = MongoCredential.createCredential("xyz", "admin", "password".toCharArray());
        MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", 1235), Arrays.asList(credential));

我得到了相同的错误,并通过设置authSource=admin解决了它

示例url字符串

mongodb://root:example@localhost:27017/learningdb?authSource=admin&retryWrites=true&w=majority

用户已经拥有完全权限,Spring boot能够在启动时连接到mongoDB。问题是在从mongo存储库访问数据时,无法对用户进行身份验证。给authSource解决了这个问题。

我在MongoDB是个十足的傻瓜,我到底应该把这个放在哪里,还是执行这个?@Messa,这样我就可以连接Mongo Shell并执行命令了?我正在使用MongoLab?您可以运行
mongo ds037395.MongoLab.com:37395
与@CryptJunior犯了相同的错误,但授予此角色并没有解决问题。很抱歉出现“多一条”评论,但有人设法解决了此问题吗?这里也有一个奇怪的问题:-(root:example代表什么?