Ich fürchte, Sie können MongoDB nicht verbinden, indem Sie Verbindung URI mit speziellen Zeichen @
in Passwort verwenden.
Denn soweit ich weiß, ist Mongo standart regex Verbindungszeichenfolge unterstützen URI.I versucht, die Mongo Shell und Treibercode zu lesen und ich fand die reason.You den connection Teil und den parser Teil von Github sehen .
Hier ist der Teil des Codes in mongo-cxx-driver.
namespace {
const char kMongoDBURL[] =
// scheme: non-capturing
"mongodb://"
// credentials: two inner captures for user and password
"(?:([^:]+)(?::([^@]+))[email protected])?"
// servers: grabs all host:port or UNIX socket names
"((?:(?:[^\\/]+|/.+.sock?),?)+)"
// database: matches anything but the chars that cannot
// be part of a MongoDB database name.
"(?:/([^/\\.\\ \"*<>:\\|\\?]*))?"
// options
"(?:\\?(?:(.+=.+)&?)+)*";
} // namespace
Wir können sehen, dass, wenn Ihre Verbindung URI mongodb://user5:[email protected]@localhost:28017/admin
ist, wird es diese Zeichenfolge analysieren und zurück mongodb://da1:[email protected]
statt mongodb://da1:[email protected]@
.
In der Tat, ich habe versucht, Benutzer-Passwort auf abc^&*123
und verbinden MongoDB mit Mongo-Shell mit einfachen Anführungszeichen und ich habe keine Sonderzeichen entkommen.Und es funktioniert.
➜ mongo 'mongodb://users:abc^&*[email protected]:27017'
MongoDB shell version v3.4.0
connecting to: mongodb://users:abc^&*[email protected]:27017
MongoDB server version: 3.4.0
Server has startup warnings:
2017-02-14T11:58:20.623+0800 I CONTROL [initandlisten]
Ich denke also, Verbindung URI andere Sonderzeichen unterstützt, ohne sie zu entkommen, aber nicht unterstützt @
Charakter in Passwort.
Sie können jedoch versuchen, diese:
➜ mongo admin -u user5 -p '[email protected]'
MongoDB shell version v3.4.0
connecting to: mongodb://127.0.0.1:27017/admin
MongoDB server version: 3.4.0
Server has startup warnings:
2017-02-14T14:15:06.109+0800 I CONTROL [initandlisten]
Sie können auch MongoDB mit anderen Tools wie Robomongo oder pymongo.They sind sehr unterstützt diese verbinden. Übrigens würde ich empfehlen, das Passwort zu einem anderen zu ändern, das @
Zeichen nicht enthält.
Hoffe, das hilft.
aktualisieren
Werfen Sie einen Blick auf SERVER-27997 und SERVER-25059 ist, dass Bug-Tracking.