如何在mongodb连接uri上分别指定身份验证数据库和目标数据库?


13

我使用这个连接URI来连接到MongoDB的:mongodb://user:password@localhost/admin。它将admin用作机器人身份验证和目标数据库。如何使uri admin用作身份验证,但允许我连接到其他数据库?请以下面的命令为例:

mongo --host localhost -u user -p password --authentication admin test

上面的命令将用作admin身份验证数据库,但连接到test数据库。如何在uri上做同样的事情?

Answers:


26

是的..轻松!

mongo "mongodb://test:testpwd@localhost/test?authSource=admin"
MongoDB shell version v3.4.6
connecting to: mongodb://test:testpwd@localhost/test?authSource=admin
MongoDB server version: 3.4.6
MongoDB> db
test
MongoDB> 

您将目标数据库放在“基本”字符串的末尾,并将身份验证数据库添加到参数authSource中。


是的,这正是我想要的。谢谢
Joey Yi Zhao

4

参考:

https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options

您将需要使用以下格式,而无需使用管理数据库。

mongodb:// user:密码@ localhost / test?authSource = admin

/ database可选。如果连接字符串包含用户名:password @格式的身份验证凭据,则要进行身份验证的数据库的名称。如果未指定/ database并且连接字符串包含凭据,则驱动程序将向admin数据库进行身份验证。

确保您在test数据库中有一个用户。请参阅本文档的第6节。

启用验证

根据部署需要创建其他用户。

创建用户的数据库(在此示例中为test)是该用户的身份验证数据库。尽管用户将对此数据库进行身份验证,但是该用户可以在其他数据库中扮演角色;即用户的身份验证数据库不限制用户的权限。

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

我已经尝试过这个uri,但是它不起作用。因为它尝试test用作不正确的身份验证数据库。我需要admin用作身份验证数据库并连接到test数据库。
赵乔伊(Joey Yi Zhao)

修改后的答案。
SqlWorldWide

感谢您的答复。但是我不想更改数据库实例上的用户角色。有什么解决方案不对实例进行任何更改?
Joey Yi Zhao

这就是MongoDB设计的方式。
SqlWorldWide

这是否意味着我无法通过mongo uri做到这一点?
Joey Yi Zhao
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.