【问题标题】:Unable to db.authenticate() - "Cannot find user"无法 db.authenticate() - “找不到用户”
【发布时间】:2016-07-28 01:26:07
【问题描述】:

我有一个本地测试环境,在 localhost 上有一个 mongod,还有一个带有用户“john”的数据库“test”。在 robomongo 中,用户“john”显示在 db“test”中。

在我的 Node.js 程序中:

  • 我通过 URI "mongodb://localhost:27017" 连接(未指定数据库)
  • db.db("test") -> 好的
  • db.authenticate("john", "xxx") -> err.message 是“身份验证失败”

本地主机上的 Mongod:“UserNotFound:找不到用户 john@test”

如何在数据库“test”中创建用户并针对“test”进行身份验证?

谢谢

【问题讨论】:

标签: node.js mongodb


【解决方案1】:

为了能够进行身份验证,用户必须在 admin 数据库中。

您通过创建一个可以访问“test”数据库的角色并分配给用户“john”来授予它访问“test”数据库的权限。

您可以在doc找到更多详细信息

【讨论】:

    【解决方案2】:

    如果您使用来自 http://mongodb.github.io/node-mongodb-native/2.1/api/ 的 mongo 驱动程序(使用 Bluebird Promise 和 typescript),请确保您拥有有权添加用户的管理员或用户,然后:

    MongoClient.connect('mongodb://localhost:27017/test')
        .then(
            (db) => {
                return db.authenticate(
                    <admin from above username>,
                    <admin from above password>
                )
                .then(
                    (success) => {
                        if(success) {
                            return Promise.resolve(db)
                        } else {
                            return Promise.reject('Yikes!');
                        }
                    }
                )
            }
        )
        .then(
            (db) => {
                const options = {
                    w: 1,
                    roles: ['readWrite']
                }
                return db.addUser(
                    <username>,
                    <password>,
                    options
                )
            }
        );
    

    1) 基本上连接到您需要将用户添加到的数据库,作为具有添加用户权限的用户(如管理员)。成功检索后,您将拥有 db 对象。

    2) 确定要分配的角色,在这种情况下,我已硬编码“readWrite”。

    3) 使用用户名和密码(以及角色选项)调用 db.addUser。 http://mongodb.github.io/node-mongodb-native/2.1/api/Db.html#addUser

    【讨论】:

    • 感谢所有的auswers!这很有趣。我对 MongoDB 身份验证的阅读和了解越多,我就越感到困惑。在我的本地主机上,我删除并创建了一个新的测试数据库。在这个数据库中(而不是在“admin”中),我添加了能够进行身份验证的 ohne。这与一些让我在“管理员”中添加所有用户的文档形成对比。那么什么是“正确”的方式呢?我的 MongoDB 服务器需要托管多个应用程序,这些应用程序有自己的用户。
    • 我正在开发一个应用程序,每个客户都有自己的数据库,因此我将用户添加到每个客户各自的数据库中,如我的回答中所述。然而,所有用户都存储在管理数据库中,因此您可以搜索“system.users”表并查找有关他们的信息(例如他们是否存在)。
    猜你喜欢
    • 2015-11-02
    • 2018-05-07
    • 2022-11-28
    • 2017-02-03
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2014-07-17
    • 2018-06-26
    相关资源
    最近更新 更多