server returned error on SASL authentication step: Authentication failed

MongodbAuthenticationGoMgo

Mongodb Problem Overview


The following is my MongoDB connection dial from GoLang. But it's returning a panic "server returned error on SASL authentication step: Authentication failed.". My username, password, hostAddrs and dbName are correct. What am I missing here?

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)

}

Mongodb Solutions


Solution 1 - Mongodb

I faced similar error and added --authenticationDatabase parameter and it worked while we connecting to a remote MongoDB

Use the similar below format in your code :

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

Solution 2 - Mongodb

Often we confused with parameter in the mongoexport command with "Log-In" user. The command expects "Database Username" not Log-in username. This is one possibility to input wrong user name. "Database Username" can be found in "Users" tab for a database

Solution 3 - Mongodb

I got my answer from this link: https://newbiedba.wordpress.com/2016/11/21/mongodb-3-2-server-returned-error-on-sasl-authentication-step-authentication-failed/

Except for all answers above, the only unmentioned reason is that my password has a special character '$' in it. I think this is a very common practice to have special characters and this may trip many without this simple tip:

When using command line mongo/mongostat/etc.. Single quote your username or password that has special characters!

Solution 4 - Mongodb

mgo returns this error if username, password or database are wrong. Check your credentials twice. There are no other situations when you can see Authentication failed error message.

Solution 5 - Mongodb

The error you report seem the cause of the authentication fail is caused by a nil pointer, you should check the data before using them to create the connection

Solution 6 - Mongodb

I got this error while using a connection string from a Heroku app by means of the --uri flag. What solved it in my case was adding the database name with -d:

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

Solution 7 - Mongodb

In my case specifying auth database and auth mechanism in uri did help

./mongoimport --uri="mongodb://root:root@localhost:27017/labelDb?authSource=admin&authMechanism=SCRAM-SHA-1" --collection=repo_item --file=/tmp/repo_item.json

Solution 8 - Mongodb

I had the same error when using with dokku mongo:import . In my case I included dot(period) in my db name

You shouldn't include dot in your mongodb name when 'dokku mongo:create ' I've changed it to seunghunlee instead of seunghunlee.net now this command works

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

Hope it helps!

Solution 9 - Mongodb

In my case, I was missing both --authenticationDatabase & --ssl, so here goes the full syntax for importing a json file into a Mongodb collection over an Atlas cluster (into the primary shard):

./mongoimport --host mycluster-shard-00-02.d0b2r.mongodb.net:27017 --authenticationDatabase admin --username TestUser --db Test --collection Messages --type json --file RAW.json --ssl

Solution 10 - Mongodb

If you are trying to connect your MongoDB Atlas to the Golang Application, the Connection function would be like this:

func getSession() *mgo.Session {

	tlsConfig := &tls.Config{}

	dialInfo := &mgo.DialInfo{
		Addrs: []string{<add your MongoDB shards as string array> }
		Username: "<MongoDB  username>",
		Password: "<MongoDB  password",
	}
	dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
		conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
		return conn, err
	}

	session, err := mgo.DialWithInfo(dialInfo)

	if err != nil {
		panic(err)
	} else {
		fmt.Printf("DB connected")
	}
	return session
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionArjun AjithView Question on Stackoverflow
Solution 1 - MongodbAnanthaView Answer on Stackoverflow
Solution 2 - MongodbGeomy GeorgeView Answer on Stackoverflow
Solution 3 - MongodbMichael ShangView Answer on Stackoverflow
Solution 4 - MongodbCrazyCrowView Answer on Stackoverflow
Solution 5 - MongodbBestbugView Answer on Stackoverflow
Solution 6 - Mongodbe18rView Answer on Stackoverflow
Solution 7 - MongodbGeorgy GobozovView Answer on Stackoverflow
Solution 8 - MongodbSeunghun Sunmoon LeeView Answer on Stackoverflow
Solution 9 - MongodbAdel AfsharipourView Answer on Stackoverflow
Solution 10 - MongodbAvikView Answer on Stackoverflow