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

MongoDB,如何使用密码上带有特殊字符“@”的uri连接,mongodb,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 [mai

我有一个在密码中有特殊字符的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连接和驱动程序连接。

恐怕您无法使用密码中带有特殊字符的连接URI来连接MongoDB

因为据我所知,Mongo正在使用standart regex来支持连接字符串URI。我试图阅读Mongo shell和驱动程序代码,并找到了原因。您可以从github中看到该部分和该部分

下面是中的代码部分

因此,我认为连接URI支持其他特殊字符而不转义它们,但不支持密码中的
@
字符

但是,您可以尝试以下方法:

➜  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]
您还可以将MongoDB与其他工具(如或pymongo)连接起来。他们非常支持这一点。顺便说一下,我建议将密码更改为另一个不包含
@
字符的密码

希望这有帮助


更新

看一看,SERVER-25059正在跟踪该漏洞

➜  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]
➜  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]