使用 SCRAM 验证客户端

以下过程在独立实例上设置 SCRAM 以进行客户端身份验证mongod

要对副本集或分片集群使用 SCRAM 身份验证,请参阅 使用密钥文件身份验证部署副本集。

程序

  1. 在没有访问控制的情况下启动 MongoDB

    启动mongod没有访问控制的独立实例。

    打开终端并以mongod用户身份运行以下命令:

    mongod --port 27017 --dbpath /var/lib/mongodb
    

    mongod本教程中的实例使用 数据port 27017目录/var/lib/mongodb

    本教程假定该/var/lib/mongodb目录存在并且是默认的dbPath. 您可以根据需要指定不同的数据目录或端口。

    提示:

    启动时mongod,它会在目录中创建一些系统文件 /var/lib/mongodb。为确保系统文件拥有正确的所有权,请以mongod 用户身份遵循本教程。如果您mongodroot用户身份开始,则稍后必须更新文件所有权。

  2. 连接到实例

    打开一个新终端并连接到数据库部署 mongosh:

    mongosh --port 27017
    
  3. 创建用户管理员

    重要的:

    本地主机异常

    您可以在启用访问控制之前或之后创建用户管理员。如果您在创建任何用户之前启用访问控制,MongoDB 会提供一个本地主机异常,允许您在数据库中创建用户管理员admin。创建后,您必须以用户管理员身份进行身份验证才能创建其他用户。

    使用mongosh:

    1. 切换到admin数据库
    2. 添加myUserAdmin具有 userAdminAnyDatabasereadWriteAnyDatabase角色的用户”:
    
    use admin
    db.createUser(
      {
        user: "myUserAdmin",
        pwd: passwordPrompt(), // or cleartext password
        roles: [
          { role: "userAdminAnyDatabase", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" }
        ]
      }
    )
    

    提升:

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

    userAdminAnyDatabase角色允许此用户:

    • 创建用户
    • 授予或撤销用户的角色
    • 创建或修改自定义角色

    您可以根据需要为用户分配额外的内置角色用户定义的角色。

    在本例中,您创建用户的数据库admin是用户的身份验证数据库。尽管用户需要对该数据库进行身份验证,但该用户可以在其他数据库中拥有角色。用户的身份验证数据库不限制用户的权限。

  4. 重新启动具有访问控制的 MongoDB 实例

    关闭mongod实例。使用 mongosh,发出以下命令:

    db.adminCommand( { shutdown: 1 } )
    

    出口mongosh.

    在启用访问控制的情况下启动mongod

    连接到此实例的客户端现在必须对自己进行身份验证,并且只能执行由其分配的角色确定的操作。

    重要的:

    本地主机异常

    您可以在启用访问控制之前或之后创建用户。如果您在创建任何用户之前启用访问控制,MongoDB 会提供一个本地主机异常,允许您在数据库中创建用户管理员admin。创建后,您必须以用户管理员身份进行身份验证才能创建其他用户。

  5. 以用户管理员身份连接和验证

    使用mongosh, 你可以:

    在连接期间进行身份认证:

    开始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 历史记录中。

    出现提示时输入密码。

下一步

要对副本集或分片集群使用 SCRAM 身份验证,请参阅 使用密钥文件身份验证部署副本集。

翻译:韩鹏帅

原文:Use SCRAM to Authenticate Clients

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

results matching ""

    No results matching ""