Golang和MongoDb的远程访问失败(服务器在SASL认证步骤返回错误:认证失败)。

3

我正在尝试使用mgo库从Go连接到远程MongoDB数据库(Mongolab),但是出现错误panic: server returned error on SASL authentication step: Authentication failed。这是我的代码:

package main

import (
    "fmt"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
    "log"
)

type Person struct {
    Name  string
    Phone string
}

func main() {
    session, err := mgo.Dial("mongodb://<dbusername>:<dbpassword>@ds055855.mlab.com:55855")

    if err != nil {
        panic(err)
    }
    defer session.Close()

    // Optional. Switch the session to a monotonic behavior.
    session.SetMode(mgo.Monotonic, true)

    c := session.DB("catalog").C("History")
    err = c.Insert(&Person{"Ale", "+55 53 8116 9639"},
        &Person{"Cla", "+55 53 8402 8510"})
    if err != nil {
        log.Fatal(err)
    }

    result := Person{}
    err = c.Find(bson.M{"name": "Ale"}).One(&result)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Phone:", result.Phone)
}

我该怎样解决这个问题?当然,在我的代码中,我会写入我的登录名和密码,而不是星号。
1个回答

5
请检查您是否已为Mongolab数据库实例添加用户(如果您的DB名称为catalog,请访问https://mongolab.com/databases/catalog#users),因为默认情况下,您的用户列表为空(账户用户名/密码!=数据库用户名/密码)。
此外,请在连接字符串末尾添加/<databasename> - mongodb://*******:*******@ds045795.mongolab.com:45795/databasename

我尝试了您的答案(添加了用户数据库,将数据库名称添加到连接中),但是什么也没有发生 :( - Влад Дарьев
@ВладДарьев 这是不可能的。请尝试这个连接字符串mongodb://souser:123456@ds055855.mlab.com:55855/catalog - CrazyCrow
同样的错误:( session, err := mgo.Dial("mongodb://souser:123456@ds055855.mlab.com:55855/catalog") panic: 服务器在SASL认证步骤上返回了错误:认证失败。 - Влад Дарьев
@ВладДарьев,我不确定你的问题是否可重复。这是你的代码执行结果http://i.imgur.com/ucc42Vm.png。如你所见,除了连接字符串之外,没有添加或更改任何内容,它可以正常工作。你能否使用RoboMongo等工具连接到你的Mongolab实例? - CrazyCrow
1
是的...很好。我发现了一些多余的代码字符串,但问题不在那里,我认为你关于为数据库创建用户的建议是解决方案。非常感谢!) - Влад Дарьев

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接