我有 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
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方式进行连接:
$ 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
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种通过 URI 进行连接的方法。如何@
在 MongoDB 中使用该字符作为 URI 连接中的密码?这样,我可以使用相同的 URI 进行 shell 连接和驱动程序连接。
恐怕您无法使用密码中包含特殊字符的连接 URI@
连接 MongoDB 。
因为据我所知,Mongo 使用标准正则表达式来支持连接字符串 URI。我尝试阅读 mongo shell 和驱动程序代码,找到了原因。您可以从 github 看到连接部分和解析器部分。
\n\n这是mongo-cxx-driver中的部分代码。
\n\nnamespace {\nconst char kMongoDBURL[] =\n // scheme: non-capturing\n "mongodb://"\n\n // credentials: two inner captures for user and password\n "(?:([^:]+)(?::([^@]+))?@)?"\n\n // servers: grabs all host:port or UNIX socket names\n "((?:(?:[^\\\\/]+|/.+.sock?),?)+)"\n\n // database: matches anything but the chars that cannot\n // be part of a MongoDB database name.\n "(?:/([^/\\\\.\\\\ \\"*<>:\\\\|\\\\?]*))?"\n\n // options\n "(?:\\\\?(?:(.+=.+)&?)+)*";\n\n} // namespace\n
Run Code Online (Sandbox Code Playgroud)\n\n我们可以看到,如果你的连接URI是mongodb://user5:123@456@localhost:28017/admin
,它会解析这个字符串并返回mongodb://da1:abc@
而不是mongodb://da1:abc@123@
。
事实上,我尝试abc^&*123
使用带单引号的 mongo shell 设置用户密码并连接 MongoDB,但没有转义任何特殊字符。而且它有效。
\xe2\x9e\x9c mongo \'mongodb://users:abc^&*123@localhost:27017\'\nMongoDB shell version v3.4.0\nconnecting to: mongodb://users:abc^&*123@localhost:27017\nMongoDB server version: 3.4.0\nServer has startup warnings:\n2017-02-14T11:58:20.623+0800 I CONTROL [initandlisten]\n
Run Code Online (Sandbox Code Playgroud)\n\n所以我认为连接 URI支持其他特殊字符而不转义它们,但不支持@
密码中的字符。
不过,你可以试试这个:
\n\n\xe2\x9e\x9c mongo admin -u user5 -p \'abc@123\'\nMongoDB shell version v3.4.0\nconnecting to: mongodb://127.0.0.1:27017/admin\nMongoDB server version: 3.4.0\nServer has startup warnings:\n2017-02-14T14:15:06.109+0800 I CONTROL [initandlisten]\n
Run Code Online (Sandbox Code Playgroud)\n\n您还可以将 MongoDB 与其他工具(如Robomongo或 pymongo)连接。他们对此非常支持。顺便说一句,我建议将密码更改为另一个不包含@
字符的密码。
希望这可以帮助。
\n\n更新
\n\n查看SERVER-27997,SERVER-25059 正在跟踪该错误。
\n 归档时间: |
|
查看次数: |
5358 次 |
最近记录: |