MongoDB两种连接字符串有效性及defaultauthdb与authSource关系问询
MongoDB连接字符串格式疑问解答
问题背景
我正在对比代码库与Studio 3T中使用的MongoDB连接字符串,两者格式存在差异:
代码库中的连接字符串
mongodb://username:password@host/targetDbName?ssl=true
Studio 3T中的连接字符串
mongodb://username:password@host/?ssl=true&authSource=targetDbName
由此产生以下疑问:
- 代码库中的连接字符串是否正确?是否需要改写为包含
?authSource=...的格式? - 根据MongoDB官方文档的连接字符串URI格式定义:
其中的mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]defaultauthdb是否与authSource对应?还是二者为不同概念? - 两种连接字符串格式是否均可成功建立连接?
注:代码库已部署在开发服务器上,无法尝试更换连接字符串,也无法在本地重现相关设置与环境。
解答
defaultauthdb与authSource的关系
二者功能完全等价,都是指定MongoDB认证时使用的数据库。URI路径部分的defaultauthdb,就是authSource参数的简写形式——当你在路径中指定这个数据库名时,就相当于在查询参数里设置了authSource=defaultauthdb。两种连接字符串的正确性
两种格式都是合法且有效的,都能成功建立MongoDB连接:- 代码库的写法:通过路径部分的
targetDbName直接指定了认证数据库,同时开启SSL加密。 - Studio 3T的写法:通过
authSource=targetDbName显式指定认证数据库,路径部分留空(此时默认认证数据库为admin,但被authSource参数覆盖),同样开启SSL加密。
- 代码库的写法:通过路径部分的
是否需要改写代码库的连接字符串
不需要。既然代码库已经在开发服务器上正常运行,说明当前连接字符串是有效的。两种写法只是表达方式不同,实际功能没有区别,强行改写反而可能带来不必要的风险。
内容的提问来源于stack exchange,提问作者waffledood
相关产品推荐
相关产品推荐

