80 votes

Le serveur a renvoyé une erreur lors de l'étape d'authentification SASL : L'authentification a échoué

Voici ma connexion MongoDB à partir de GoLang. Mais il renvoie une panique " Le serveur a renvoyé une erreur lors de l'étape d'authentification SASL : L'authentification a échoué. ". Mon nom d'utilisateur, mot de passe, hostAddrs et dbName sont corrects. Qu'est-ce qui me manque ici ?

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)

}

185voto

Anantha Points 886

J'ai rencontré une erreur similaire et j'ai ajouté --authenticationDatabase et cela a fonctionné lorsque nous nous sommes connectés à un serveur MongoDB distant.

Utilisez le format similaire ci-dessous dans votre code :

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

1 votes

Merci, dans mon cas, c'était exactement la solution.

2 votes

Je suis confus... qu'est-ce que le paramètre --authenticationDatabase ? le nom de la base de données à laquelle vous voulez accéder ?

1 votes

Dans mon cas, je n'avais accès qu'à une seule base de données sur le serveur. J'avais donc juste besoin d'ajouter -d <dbname> option. Pas besoin de --authenticationDatabase pour moi

16voto

Geomy George Points 91

Nous confondons souvent le paramètre dans la commande mongoexport avec l'utilisateur "Log-In". La commande attend "Database Username" et non "Log-in username". C'est une possibilité de saisir un mauvais nom d'utilisateur. Le "Nom d'utilisateur de la base de données" peut être trouvé dans l'onglet "Utilisateurs" pour une base de données.

2 votes

Dans mon cas, j'ai utilisé mon mot de passe mLab au lieu du mot de passe de la base de données. C'est une erreur stupide, mais cette réponse m'a aidé à comprendre !

9voto

Michael Shang Points 466

J'ai obtenu ma réponse grâce à ce lien : https://newbiedba.wordpress.com/2016/11/21/mongodb-3-2-server-returned-error-on-sasl-authentication-step-authentication-failed/

En dehors de toutes les réponses ci-dessus, la seule raison non mentionnée est que mon mot de passe contient un caractère spécial "$". Je pense que c'est une pratique très courante d'avoir des caractères spéciaux et cela peut faire trébucher beaucoup de gens sans cette simple astuce :

Lorsque vous utilisez mongo/mongostat/etc. en ligne de commande. Mettez entre guillemets votre nom d'utilisateur ou votre mot de passe qui contient des caractères spéciaux !

0 votes

C'est exactement mon problème. Merci.

0 votes

Tl;dr "Pour résoudre le problème, il suffit de mettre le champ du mot de passe en apostrophe", par exemple -p 'password'.

0 votes

Merci, j'ai eu un & qui causait le problème

4voto

CrazyCrow Points 2670

mgo renvoie cette erreur si username , password o database sont fausses. Vérifiez deux fois vos informations d'identification. Il n'y a pas d'autres situations où vous pouvez voir Authentication failed message d'erreur.

0 votes

Le serveur a renvoyé une erreur lors de l'étape d'authentification SASL : Authentication failed. panic : runtime error : invalid memory address or nil pointer dereference panic : runtime error : invalid memory address or nil pointer dereference

1 votes

Oui, c'est la bonne façon d'implémenter la connexion. Voici le code qui fonctionne gist.github.com/bearburger/718dec31746762684a7a512aed992a37 qui connecte la démo DB.

1voto

Bestbug Points 263

L'erreur que vous signalez semble être la cause de l'échec de l'authentification est due à un pointeur nul, vous devez vérifier les données avant de les utiliser pour créer la connexion.

2 votes

Je ne sais pas comment le votant le plus fort vous a compris, mais je suis sûr de n'avoir rien compris à votre réponse. Pourriez-vous élaborer davantage ?

0 votes

Après plus d'un an, je ne sais plus exactement à quoi je pensais. Mon idée était probablement que l'application Golang ne peut pas récupérer une ou plusieurs env_variables de l'hôte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X