如何在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.