我了解如何在 MySQL 中创建网络应用程序将使用的用户 - 我如何在 MongoDB 中创建相同的用户?

I understand how to create a user in MySQL that a web app would utilize - how can I do the same in MongoDB?

作为一名经验丰富的 Web 开发人员 - 我得到了 连接字符串

我在 WordPress wp-config.php 文件中看到过它们,我在许多 ASP.NET app.config 文件中看到过它们。我知道如何进入 MySQL 安装并创建一个 userName@ 并授予他们所有权限(或子集),以便 Web 应用程序可以使用该凭据进行连接。

我知道如何进入 MS SQL 服务器的安全部分并设置集成用户或 SQL-仅登录用户..等等

有人可以使用上述任何技术进行类比并帮助我更好地理解如何在 MongoDB(是的,我可以 google 中)在特定数据库上创建用户有 'all privileges' 然后生成的连接字符串应该是什么样子?

当我在 mongo shell 时,是否没有默认块 JSON,具有众所周知的角色.. 适合网络我应该将 application 传递给 db.createUser() 调用?我似乎无法在我一直寻找的地方找到它。


编辑 除了在下面实施 Markus Mahlberg 的漂亮答案之外 - 我发现我遇到了一个需要 的身份验证错误,这需要我重新创建我的管理员用户角色:"root" 在继续之前。

简介

好吧,先到先得,不得不说。

MongoDB 是 不是

  • 更酷、更新、更闪亮 MySQL。不一样,在每一个主要方面
  • 适合类比产品 X(甚至是 couchdb)来思考。事实上,如果你这样做,迟早会给你带来麻烦。
  • 要掉以轻心。您需要阅读文档。彻底。再一次。

你真的要停止思考 "How do I do X like I did in technology Y in technology Z?"

例如在MongoDB中涉及数据建模时,这种态度会让您有些头疼,有些容易改正(例如overembeding),有些非常非常难(比如选择了错误的分片键)。

Disclaimer Changing security settings may render your instance and/or cluster inaccessible. Proceed with extreme caution and only if you are absolutely positively sure you understood what you are doing.

我假设我们正在谈论一个独立的 MongoDB 实例或一个副本集。如果你有一个分片集群,请停止阅读并询问你的 DBA——或者得到一个。

Step 0: Read the security docs

真的。我是认真的。 Sudo 阅读文档! ;) 它们写得很好,透彻且很有帮助。

您需要了解自己在做什么,因此阅读文档是第 0 步。

第 1 步:创建管理用户

要在启用身份验证功能时准备好管理用户,您需要先进行设置。

  1. 连接到您的 mongodb 实例
  2. 更改为admin数据库

    use admin
    
  3. 创建管理用户

    db.createUser({
        user: "funkyNameForUserAdminSinceThereIsNoConvention",
        pwd: "changeMePlease:Loremipsumdolorsitamet,consecteturt",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    })
    

请注意,该用户只有管理其他用户的权限。用户没有任何其他权限。如果您需要其他权限:在完成第 4 步后使用 respective roles 添加相应的用户。

第 2 步:启用身份验证

可能 MongoDB 中最具争议的默认设置是 默认情况下不启用身份验证 ,这导致 quite some data exposed to the public by... less professional people.

enable authentication, you need to configure your instance accordingly. Here comes a problem: there are two configuration file formats available: the legacy format and YAML。您需要找出您的安装使用的是哪一个,并根据以下详细信息进行更改。

旧格式

添加行

auth=true

给你的mongod.conf

采用 YAML 格式

添加

security:
    authorization: enabled

你的mongod.conf(缩进很重要!)。

第 3 步:重启您的 MongoDB 实例

这里不多说,因为我不知道你的OS,但我相信你知道如何做到这一点

第 4 步:创建用户帐户

在MongoDB中,任何用户都可以存储在(几乎)任何数据库中。因此,可以访问 "foo" 的用户很可能存储在数据库 "bar" 中。这样做的原因是,虽然用户的主数据库可能是 "bar",但他也可能被授予对数据库 "foo" 的访问权限,这样就不需要重复的用户条目。请求访问 "foo" 的用户将通过为 shell 客户端设置 --authenticationDatabase 标志来实现:

mongo [host[:port]/]foo --authenticationDatabase bar -u funkyUser -p

我们现在对新创建的管理员用户这样做:

mongo [host[:port]/]bar --authenticationDatabase admin \ 
-u funkyNameForUserAdminSinceThereIsNoConvention -p

我们现在应该在数据库 "bar" 中,我们要为 "foo" 和 "bar" 创建一个用户 readWrite role,如上例所示.

db.createUser({
  user: "funkyUser",
  pwd: "changeMePlease:Loremipsumdolorsitamet,consecteturt",
  roles: [
    {role: "readWrite", db:"foo"},
    {role: "readWrite", db:"bar"}
  ]
})

完成!

您现在应该能够以 "funkyUser" 身份登录并根据 Web 应用程序的需要读取和更改 "foo" 和 "bar"。