创建用户

启用访问控制后,用户需要表明自己的身份。您必须授予用户一个或多个角色。角色授予用户在 MongoDB资源上执行特定操作的权限

MongoDB 系统的每个应用程序和用户都应该映射到一个不同的用户。这种访问隔离原则有助于访问撤销和持续的用户维护。为确保系统的最低权限,只授予用户所需的最少权限集。

先决条件

为了能够创建用户,您需要:

对于常规用户创建,您必须拥有以下权限:

和内置角色 在各自的资源userAdmin上提供 和操作userAdminAnyDatabasecreateUsergrantRole

程序

笔记:

以下过程使用SCRAM 身份验证。有关其他身份验证机制的更多信息,请参阅额外的例子。

  1. 连接和验证

    使用mongosh,连接到您的主服务器 mongod,或者在分片集群中,连接到您的 mongos并以用户管理员或用户身份进行身份验证所需特权:

    • 在连接期间进行身份验证

      开始mongosh-u,-p, 和 --authenticationDatabase命令行选项:

      mongosh --port 27017  --authenticationDatabase \
          "admin" -u "myUserAdmin" -p
      

      出现提示时输入密码。

    • 连接后验证

      使用mongosh,连接到您的数据库部署:

      mongosh --port 27017
      

      mongosh,切换到身份验证数据库(在本例中为admin),并使用db.auth(, )方法进行身份验证:

      use admin
      db.auth("myUserAdmin", passwordPrompt()) // or cleartext password
      

      提示:

      passwordPrompt()方法提示您输入密码。您也可以直接将密码指定为字符串。我们建议使用该passwordPrompt()方法来避免密码在您的屏幕上可见并可能将密码泄露到您的 shell 历史记录中。

      出现提示时输入密码。

  2. 为您的服务创建额外的用户

    笔记:

    以下步骤使用SCRAM身份验证。有关其他身份验证机制的更多信息,请参阅 额外的例子。

    验证为用户管理员后,使用该 db.createUser()方法创建其他用户。您可以为用户分配任何内置角色用户定义的角色。

    以下操作将一个用户添加myTestertest 数据库中,该用户具有数据库readWrite中的角色test 以及数据库read中的角色reporting

    use test
    db.createUser(
      {
        user: "myTester",
        pwd:  passwordPrompt(),   // or cleartext password
        roles: [ { role: "readWrite", db: "test" },
                 { role: "read", db: "reporting" } ]
      }
    )
    

    提示:

    passwordPrompt()方法提示您输入密码。您也可以直接将密码指定为字符串。我们建议使用该passwordPrompt()方法来避免密码在您的屏幕上可见并可能将密码泄露到您的 shell 历史记录中。

    您在其中创建用户的数据库(在本例中为test)是该用户的身份验证数据库。尽管用户对此数据库进行了身份验证,但该用户可以在其他数据库中拥有角色。用户的认证数据库不限制用户的权限。

    创建其他用户后,退出mongosh.

  3. 连接到实例并验证为myTester

    重要的:

    无法在同一用户之间切换 mongosh会议。作为不同的用户进行身份验证意味着会话具有两个经过身份验证的用户的特权。在用户退出和重新启动之间切换 mongosh.

    退出后mongosh作为myUserAdmin,重新连接为 myTester

    • 在连接期间进行身份验证

      开始mongosh-u,-p, 和 --authenticationDatabase命令行选项:

      mongosh --port 27017 -u "myTester" \
          --authenticationDatabase "test" -p
      

      出现提示时输入用户密码。

    • 连接后验证

      mongosh --port 27017
      

      mongosh,切换到身份验证数据库(在本例中为admin),并使用db.auth(, )方法进行身份验证:

      use test
      db.auth("myTester", passwordPrompt())  // or cleartext password
      

      提示:

      passwordPrompt()方法提示您输入密码。您也可以直接将密码指定为字符串。我们建议使用该passwordPrompt()方法来避免密码在您的屏幕上可见并可能将密码泄露到您的 shell 历史记录中。

      出现提示时输入用户密码。

  4. 插入文档作为myTester

    作为用户myTester,您有权在数据库中执行读写操作test(以及在reporting数据库中执行读取操作)。验证为 后 myTester,将文档插入test 数据库中的集合。例如,您可以在test数据库中执行以下插入操作:

    db.foo.insertOne( { x: 1, y: 1 } )
    

提示:

也可以看看:

管理用户和角色

其他示例

用户名/密码认证

以下操作在reporting 数据库中创建一个具有指定名称、密码和角色的用户。

提示:

passwordPrompt()方法提示您输入密码。您也可以直接将密码指定为字符串。我们建议使用该passwordPrompt()方法来避免密码在您的屏幕上可见并可能将密码泄露到您的 shell 历史记录中。

use reporting
db.createUser(
  {
    user: "reportsUser",
    pwd: passwordPrompt(),  // or cleartext password
    roles: [
       { role: "read", db: "reporting" },
       { role: "read", db: "products" },
       { role: "read", db: "sales" },
       { role: "readWrite", db: "accounts" }
    ]
  }
)

Kerberos 认证

使用外部身份验证机制(例如 Kerberos)对 MongoDB 进行身份验证的用户必须在数据库中创建$external ,这允许mongosmongod 参考外部源进行身份验证。

要对身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证$external用户名不能超过 10k 字节。

对于 Kerberos 身份验证,您必须添加 Kerberos 主体作为用户名。您不需要指定密码。

reportingapp@EXAMPLE.NET以下操作添加了对数据库具有只读访问权限的Kerberos 主体 records

use $external
db.createUser(
    {
      user: "reportingapp@EXAMPLE.NET",
      roles: [
         { role: "read", db: "records" }
      ]
    }
)

提示:

也可以看看:

有关为 MongoDB 部署设置 Kerberos 身份验证的更多信息,请参阅以下教程:

LDAP 身份验证

使用外部身份验证机制(例如 LDAP)对 MongoDB 进行身份验证的用户必须在数据库中创建$external ,这允许mongosmongod 参考外部源进行身份验证。

要对身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证$external用户名不能超过 10k 字节。

对于 LDAP 身份验证,您必须指定用户名。您不需要指定密码,因为它由 LDAP 服务处理。

以下操作添加reporting对数据库具有只读访问权限的用户records

use $external
db.createUser(
    {
      user: "reporting",
      roles: [
         { role: "read", db: "records" }
      ]
    }
)

提示:

也可以看看:

有关为 MongoDB 部署设置 LDAP 身份验证的更多信息,请参阅以下教程:

x.509 客户端证书身份验证

使用外部身份验证机制(例如 x.509 客户端证书身份验证)对 MongoDB 进行身份验证的用户必须在数据库中创建$external ,这允许mongosmongod 参考外部源进行身份验证。

要对身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证$external用户名不能超过 10k 字节。

对于 x.509 客户端证书身份验证,您必须添加来自客户端证书的值subject作为 MongoDB 用户。每个唯一的 x.509 客户端证书对应一个 MongoDB 用户。您不需要指定密码。

以下操作添加 CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry 对数据库具有只读访问权限的客户端证书主题用户records

use $external
db.createUser(
    {
      user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry",
      roles: [
         { role: "read", db: "records" }
      ]
    }
)

提示:

也可以看看:

有关为 MongoDB 部署设置 x.509 客户端证书身份验证的更多信息,请参阅以下教程:

下一步

要管理用户、分配角色和创建自定义角色,请参阅 管理用户和角色。

翻译:韩鹏帅

原文:Create a User

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""