2017-02-14 2 views
2

Ich habe au benutzer, der spezielle zeichen in seinem passwort hat. Das Passwort lautet [email protected]. Ich habe versucht, dem Charakter zu entkommen, aber es funktioniert immer noch nicht. Unten ist die Methode, die ich versuchte:MongoDB, Wie uri verbindung mit speziellen charaters @ @ auf das passwort

$ mongo mongodb://user5:123%[email protected]:28017/admin 
MongoDB shell version v3.4.0 
connecting to: mongodb://user5:123%[email protected]:28017/admin 
2017-02-14T12:11:47.571+1100 E QUERY [main] Error: Authentication failed. : 
[email protected]/mongo/shell/mongo.js:234:13 
@(connect):1:6 
exception: connect failed 

ich unten Art und Weise verwenden kann, um die Verbindung zu tun:

$ mongo mongodb://localhost:28017/admin -u user5 -p [email protected] 
MongoDB shell version v3.4.0 
connecting to: mongodb://localhost:28017/admin 
MongoDB server version: 3.4.0 

Aber ich nach einem Weg suchen durch URI zu verbinden. Wie verwendet man dieses @ Zeichen als ein Passwort in URI-Verbindung in MongoDB? Auf diese Weise kann ich den gleichen URI für Shell-Verbindung und Treiberverbindung verwenden.

Antwort

0

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.

Verwandte Themen