【问题标题】:MongoDB & Mongoose accessing one database while authenticating against another (NodeJS, Mongoose)MongoDB 和 Mongoose 访问一个数据库,同时针对另一个数据库进行身份验证(NodeJS、Mongoose)
【发布时间】:2019-04-08 17:51:53
【问题描述】:

我有几个数据库,不想为每个数据库创建单独的用户帐户。 MongoDB 支持使用在另一个数据库中定义的帐户来验证对数据库的访问的概念,但是很难找到语法示例。

当我终于弄明白时,我正要发布一个问题。以防万一它可以帮助其他人

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    这是 mongodb、mongoose、节点设置的语法。

    1. 在 mongo shell 的 admin 数据库中创建数据库用户

      use admin

      db.addUser( { user: "mydbuser", pwd: "mypassword", roles: [ ] } )

    2. 创建数据库并添加用户 - userSource 表示 凭据在管理数据库中定义

      use mydb
      db.addUser( { user: "mydbuser", userSource: "admin" , roles: [ "readWrite" , "dbAdmin"] } )

    3. 在mongoose连接字符串中指定auth参数

      var myDB = mongoose.createConnection("mongodb://mydbuser:mypassword@myipaddress:27017/mydb" ,{auth:{authdb:"admin"}});

      选项 {auth:...} 指定用户帐户必须针对 admin db 进行身份验证。

    4. 类似从 mongo shell 连接数据库

      mongo myipaddr:27017/mydb -u "mydbuser" -p "mypassword"

    注意:用户“mydbuser”只有对 mydb 的读/写和管理员访问权限。您可以找到有关用户权限here 的更多信息。该场景的更完整示例是here

    【讨论】:

    • userSource 字段已从 v2.6 中的 createUser 方法中删除。您能指导我使用与帖子等效的 createUser 方法吗?
    • 此信息在最新版本的 mongo 中不再正确。
    【解决方案2】:

    这也可以通过修改mongodb本身的连接字符串来简化:

    例如:mongodb://username:password@IP:Port/mydbname?authSource=admin 因为 mongoose 支持 mongodb https://docs.mongodb.com/manual/reference/connection-string/#urioption.authSource

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2021-09-27
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      相关资源
      最近更新 更多