MongoDB,如何在密码上使用特殊字符“@”的uri连接

时间:2017-02-14 01:15:12

标签: mongodb

我的au用户密码中包含特殊字符。密码为123@456。我试图逃避角色,但它仍然无效。以下是我尝试的方法:

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

我可以使用以下方式进行连接:

$ mongo mongodb://localhost:28017/admin -u user5 -p 123@456
MongoDB shell version v3.4.0
connecting to: mongodb://localhost:28017/admin
MongoDB server version: 3.4.0

但我正在寻找通过URI连接的方法。如何在MongoDB的URI连接中使用此@字符作为密码?通过这种方式,我可以使用相同的URI进行shell连接和驱动程序连接。

1 个答案:

答案 0 :(得分:0)

我担心您无法通过连接URI 与密码中的特殊字符unsigned char byte = *(unsigned char *)&x连接MongoDB。

因为据我所知,Mongo正在使用标准正则表达式来支持连接字符串URI。我试图读取mongo shell和驱动程序代码,我找到了原因。你可以看到connection部分和{ {3}}来自github。

以下是parser中代码的一部分。

@

我们可以看到,如果您的连接URI是namespace { const char kMongoDBURL[] = // scheme: non-capturing "mongodb://" // credentials: two inner captures for user and password "(?:([^:]+)(?::([^@]+))?@)?" // 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 ,它将解析此字符串并返回mongodb://user5:123@456@localhost:28017/admin而不是mongodb://da1:abc@

事实上,我尝试将用户密码设置为mongodb://da1:abc@123@并使用单引号使用mongo shell连接MongoDB,并且我没有转义任何特殊字符。它可以工作。

abc^&*123

所以我认为连接URI 支持其他特殊字符而不转义它们但不支持密码中的➜ mongo 'mongodb://users:abc^&*123@localhost:27017' MongoDB shell version v3.4.0 connecting to: mongodb://users:abc^&*123@localhost:27017 MongoDB server version: 3.4.0 Server has startup warnings: 2017-02-14T11:58:20.623+0800 I CONTROL [initandlisten] 字符。

但是,你可以试试这个:

@

此外,您可以将MongoDB与其他工具(如mongo-cxx-driver或pymongo)连接起来。他们非常支持这一点。顺便说一句,我建议将密码更改为另一个不包含➜ mongo admin -u user5 -p 'abc@123' 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] 字符的密码。

希望这有帮助。

更新

查看Robomongo,SERVER-25059正在跟踪该错误。