我的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连接和驱动程序连接。
答案 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正在跟踪该错误。