服务器在SASL身份验证步骤上返回错误:身份验证失败


76

以下是我从GoLang获得的MongoDB连接拨号。但是它返回一个紧急消息“ SASL身份验证步骤服务器返回错误:身份验证失败。 ”。我的用户名,密码,hostAddrs和dbName是正确的。我在这里想念什么?

dbName: = os.Getenv("ENV_DBNAME")
userName: = os.Getenv("ENV_DBUSER")
password: = os.Getenv("ENV_DBPASS")
dbHost: = os.Getenv("ENV_DBHOST")
mongoDialInfo: = & mgo.DialInfo {
 Addrs: [] string {
  dbHost
 },
 Database: dbName,
 Username: userName,
 Password: password,
 Timeout: 60 * time.Second,
}
sess, err: = mgo.DialWithInfo(mongoDialInfo)
if (err != nil) {
 panic(err)

}

Answers:


163

我遇到类似的错误并添加了--authenticationDatabase参数,并且在我们连接到远程MongoDB时可以正常工作

在您的代码中使用以下类似格式:

$mongorestore --host databasehost:98761 --username restoreuser
--password restorepwd --authenticationDatabase admin --db targetdb ./path/to/dump/

1
谢谢,就我而言,这正是解决方案。
拉夫

2
我很困惑... --authenticationDatabase参数是什么?您要访问的数据库的名称?
vabm

1
就我而言,我只能访问服务器上的一个数据库。所以我只需要添加-d <dbname>选项。不需要--authenticationDatabase
alaster

这是正确的建议,但是我在密码中输入了'%',并且在cmd.exe脚本中该符号已消失。我有同样的错误=)
Pax

我曾有一个 ';' 用我的密码!
布鲁诺·费尔南德斯

15

通常,我们将“登录”用户与mongoexport命令中的参数混淆。该命令应使用“数据库用户名”而不是登录用户名。这是输入错误用户名的一种可能性。在数据库的“用户”选项卡中可以找到“数据库用户名”


2
就我而言,我使用的是mLab密码而不是db密码。愚蠢的错误,但是这个答案帮助我弄清楚了!
ahaurat

7

我从以下链接获得了答案:https : //newbiedba.wordpress.com/2016/11/21/mongodb-3-2-server-returned-error-on-sasl-authentication-step-authentication-failed/

除上述所有答案外,唯一未提及的原因是我的密码中包含特殊字符“ $”。我认为使用特殊字符是一种非常普遍的做法,如果没有这个简单提示,这可能会使许多人绊倒:

当使用命令行mongo / mongostat / etc。时。请单引号包含特殊字符的用户名或密码!


正是我的问题。谢谢。
Zach B.

tl; dr“要解决此问题,只需将密码字段单引号。” 如-p“密码”
安德烈·拉迪尤利斯卡

谢谢,我遇到了&引起问题的原因
杰克

4

mgo返回此错误,如果usernamepassword或者database是错误的。检查您的凭据两次。当您看到Authentication failed错误消息时,没有其他情况。


服务器在SASL身份验证步骤上返回错误:身份验证失败。恐慌:运行时错误:无效的内存地址或nil指针取消引用恐慌:运行时错误:无效的内存地址或nil指针取消引用
Arjun Ajith

1
是的,这是实现连接的正确方法。这是连接演示数据库的工作代码gist.github.com/bearburger/718dec31746762684a7a512aed992a37
CrazyCrow

1

您报告的错误似乎是身份验证失败的原因是由nil指针引起的,您应该在使用它们创建连接之前检查数据


2
我不知道投票者是如何理解您的,但是我敢肯定,您的回答对我一无所知。介意更多...?
rrw

一年多以后,我完全不知道自己在想什么。我的想法可能是Golang应用程序无法从主机获取一个或多个env_variable。
Bestbug

1

通过--uri标志使用Heroku应用程序中的连接字符串时出现此错误。在我的情况下解决此问题的方法是添加数据库名称-d

mongodb_uri="$(heroku config:get MONGODB_URI -a myapp)"
mongorestore --uri=$mongodb_uri -d heroku_7m41q4xs db/

0

与dokku mongo:import一起使用时出现相同的错误。就我而言,我在数据库名称中包含了点号(句点)

'dokku mongo:create'时,您不应该在mongodb名称中包含点号。我现在将其更改为seunghunlee而不是seunghunlee.net,现在此命令有效

dokku mongo:import seunghunlee < seunghunlee.net.dump.gz

希望能帮助到你!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.