更新时间:2024-04-29 GMT+08:00

创建用户

操作须知

  • 下面所有操作都对权限要求,默认rwuser用户具备所需权限,如果通过客户自定义用户进行管理,则需要关注是否具备操作权限。
  • 使用具备权限的用户(可使用rwuser)连接到数据库实例。
  • 通过createUser创建所需的用户,通过设置合适的角色来控制对应用户的权限。其中需要注意的是"passwordDigestor" 参数必须是 "server",否则命令会执行失败,增加这个约束是为了避免安全隐患。

创建用户

db.createUser(user, writeConcern)

  • 命令中user为必选参数,类型为文档,包含了要创建用户的身份认证和访问信息。
  • writeConcern为可选参数,类型为文档,包含了创建操作的write concern级别。
user文档定义了用户,其格式如下:
{
  user: "<name>",
  pwd: "<cleartext password>",
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ],
  authenticationRestrictions: [
     {
       clientSource: ["<IP>" | "<CIDR range>", ...],
       serverAddress: ["<IP>" | "<CIDR range>", ...]
     },
     ...
  ]
  mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
  passwordDigestor: "<server|client>"
}
表1 user参数说明

字段

类型

说明

user

string

新用户名称。

pwd

string

用户密码,如果您在$external数据库上运行db.createUser()以创建将凭据存储在 MongoDB外部的用户,则pwd字段不是必需的。

customData

文档

可选的。任何任意信息,该字段可用于存储管理员希望与此特定用户关联的任何数据。例如,这可以是用户的全名或员工ID。

roles

数组

授予用户的角色。可以指定一个空数组[]来创建没有角色的用户。

authenticationRestrictions

数组

可选的。服务器对创建的用户强制执行的身份验证限制,用于指定该角色可接入的IP地址或者IP地址段。

mechanisms

数组

可选的。指定用于创建SCRAM用户凭据的特定SCRAM机制。当前只包含SCRAM-SHA-1和SCRAM-SHA-256。

passwordDigestor

string

可选的。指示是在server端还是client端验证密码,默认是server。

示例

  • 创建用户时不同数据库赋予不同角色

    使用db.createUser()在products数据库中创建accountAdmin01用户。

    use products
    db.createUser( { user: "accountAdmin01",
                     pwd: "Changeme_123",
                     customData: { employeeId: 12345 },
                     roles: [ { role: "clusterAdmin", db: "admin" },
                              { role: "readAnyDatabase", db: "admin" },
                              "readWrite"] },
                   { w: "majority" , wtimeout: 5000 } )
    以上操作赋予用户accountAdmin01以下角色:
    • 在admin数据库中角色为clusterAdmin和readAnyDatabase。
    • 在products数据库中角色为readWrite。
  • 创建用户时同一数据库赋予多个角色

    以下操作创建一个在products数据库中角色为readWrite和dbAdmin的用户,用户名为accountUser。

    use products
    db.createUser(
       {
         user: "accountUser",
         pwd: "Changeme_123",
         roles: [ "readWrite", "dbAdmin" ]
       }
    )
  • 创建用户时不赋予角色

    以下操作在admin数据库中创建一个用户名为reportsUser的用户,但是没有赋予用户角色。

    use admin
    db.createUser(
       {
         user: "reportsUser",
         pwd: "Chagneme_123",
         roles: [ ]
       }
    )
  • 创建管理员用户并赋予角色

    下面的操作将在admin 数据库中创建名为appAdmin的用户,并赋予该用户对config数据库的读写访问权限,使用户可以更改分片群集的某些设置,如分片均衡器设置。

    use admin
    db.createUser(
       {
         user: "appAdmin",
         pwd: "Changeme_123",
         roles:
           [
             { role: "readWrite", db: "config" },
             "clusterAdmin"
           ]
       }
    )
  • 创建有身份验证限制的用户

    以下操作将在管理员数据库中创建一个名为restricted的用户。该用户只能从IP地址192.0.2.0连接到IP地址198.51.100.0时才能进行身份验证。

    use admin
    db.createUser(
       {
         user: "restricted",
         pwd: "Changeme_123",
         roles: [ { role: "readWrite", db: "reporting" } ],
         authenticationRestrictions: [ {
            clientSource: ["192.0.2.0"],
            serverAddress: ["198.51.100.0"]
         } ]
       }
    )
  • 仅使用SCRAM-SHA-256证书创建用户

    下面的操作将创建一个只有SCRAM-SHA-256凭据的用户。

    use reporting
    db.createUser(
       {
         user: "reportUser256",
         pwd: "Changeme_123",
         roles: [ { role: "readWrite", db: "reporting" } ],
         mechanisms: [ "SCRAM-SHA-256" ]
       }
    )

    如果设置了authenticationMechanisms参数,mechanisms字段只能包含authenticationMechanisms参数中指定的值。