1 创建用户 db.createUser(user, writeConcern)

db.createUser(user, writeConcern)

为运行该方法的数据库创建新用户。如果用户已经存在于数据库中,则返回一个重复用户错误

Parameter

Type

Type

user

document

要创建的用户的身份验证和访问信息

writeConcern

document

可选,创建操作的写关注级别。writeConcern文档接受与getLastError命令相同的字段


user 文档参数

{
  user: "<name>",
  pwd: passwordPrompt(),      // Or  "<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>"
}

Field

Type

Description

user

string

新用户的名字

pwd

string

用户密码。可以是明确的密码字符串,可以是 passwordPrompt()方法,提示输入用户密码。

customData

document

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

roles

array

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

authenticationRestrictions

array

可选, 服务器对创建的用户实施的身份验证限制。指定一个IP地址列表和CIDR范围,允许用户连接到服务器,或者服务器可以接受用户

mechanisms

array

可选,指定特定SCRAM机制 或 创建SCRAM用户凭据的机制。 只能是 "SCRAM-SHA-1" "SCRAM-SHA-256"

passwordDigestor

string

可选,表示服务器还是客户端接收密码。可选值:"server" (默认) , "client" (与 SCRAM-SHA-256 不兼容 )


authenticationRestrictions

Field

Type

Description

clientSource

IP地址和/或CIDR范围的数组

如果存在,当对用户进行身份验证时,服务器验证客户端的IP地址是否在给定的列表中或属于列表中的CIDR范围。如果客户机的IP地址不存在,服务器就不会对用户进行身份验证。

serverAddress

IP地址和/或CIDR范围的数组

客户端可以连接到的IP地址或CIDR范围的列表。如果存在,服务器将通过给定列表中的IP地址验证客户端连接是否被接受。如果连接通过一个无法识别的IP地址被接受,服务器就不会对用户进行身份验证。


注意:
从4.0.9版开始,MongoDB在创建用户时自动分配一个唯一的用户id
如果在复制集中运行,db.createUser()默认使用majority write concern执行
不能在 local 数据库上创建用户


例子

use products
db.createUser( { user: "accountAdmin01",
                 pwd: passwordPrompt(),  // Or  "<cleartext password>"
                 customData: { employeeId: 12345 },
                 roles: [ { role: "clusterAdmin", db: "admin" },
                          { role: "readAnyDatabase", db: "admin" },
                          "readWrite"] },
               { w: "majority" , wtimeout: 5000 } )

2、 删除用户

db.dropUser(username, writeConcern)

删除该数据库下的单个用户

Parameter

Type

Description

username

string

要删除用户的用户名

writeConcern

document

可选,删除操作的写关注级别。writeConcern文档接受与getLastError命令相同的字段

注意:
执行删除操作的用户必须有删除其他用户的权限
如果在复制集中运行,db.dropUser()默认使用majority write concern执行


例子:

use products
db.dropUser("reportUser1", {w: "majority", wtimeout: 5000})

3、删除所有用户

db.dropAllUsers(writeConcern)

删除当前数据库的所有用户
| Parameter | Type | Description |
| ---- | ---- | ---- |
| writeConcern | document | 可选,删除操作的写关注级别。writeConcern文档接受与getLastError命令相同的字段 |

注意:
执行删除操作的用户必须有删除其他用户的权限
如果在复制集中运行,db.dropUser()默认使用majority write concern执行


例子:

use products
db.dropAllUsers( {w: "majority", wtimeout: 5000} )

4、获取指定用户信息

db.getUser(username, args)

Parameter

Type

Description

username

string

要删除用户的用户名

args

document

可选参数

db.getUser( "<username>", {
   showCredentials: <Boolean>,
   showPrivileges: <Boolean>,
   showAuthenticationRestrictions: <Boolean>,
   filter: <document>
} )

Field

Type

Description

showCredentials

boolean

可选,true,以hash值显示密码,默认为false

showPrivileges

Boolean

可选,true,显示用户的所有权限列表,包括继承权限的扩展信息,默认为false。如果查看所有用户,则不能指定此字段。

showAuthenticationRestrictions

boolean

可选,true, 显示用户的认证约束,默认false。如果查看所有用户,则不能指定此字段。

filter

document

可选,指定$match 阶段条件,返回符合筛选条件的用户信息

注意:
用户可以查看自己的信息。如果要查看其它用户的信息,需要查看的权限。


例子

use accounts
db.getUser("appClient")

5、 获取所有用户信息

db.getUsers(options)

db.getUsers( {
   showCredentials: <Boolean>,
   filter: <document>
} )

Field

Type

Description

showCredentials

boolean

可选,true,以hash值显示密码,默认为false

filter

document

可选,指定$match 阶段条件,返回符合筛选条件的用户信息

例子

# 返回 用户凭证  机制为 SCRAM-SHA-256  的所有用户
db.getUsers({ filter: { mechanisms: "SCRAM-SHA-256" } })

6、向用户授予角色

db.grantRolesToUser(username, roles, writeConcern)

Parameter

Type

Description

username

string

要添加角色的用户的用户名

roles

array

要添加的角色数组

writeConcern

document

可选,删除操作的写关注级别。writeConcern文档接受与getLastError命令相同的字段

注意:
执行该操作的用户必须要有权限
如果在复制集中运行,默认使用majority write concern执行

例子:

# 可以给用户授予当前数据库的角色,也可是其他数据库

use products
db.grantRolesToUser(
   "accountUser01",
   [ "readWrite" , { role: "read", db: "stock" } ],
   { w: "majority" , wtimeout: 4000 }
)

7、 去除用户的角色

db.grantRolesToUser(username, roles, writeConcern)

在当前数据库中,去除用户角色

Parameter

Type

Description

username

string

要去除角色的用户的用户名

roles

array

要去除的角色数组

writeConcern

document

可选,删除操作的写关注级别。writeConcern文档接受与getLastError命令相同的字段

注意:
执行该操作的用户必须要有权限
如果在复制集中运行,默认使用majority write concern执行

例子

use products
db.revokeRolesFromUser( "accountUser01",
                        [ { role: "read", db: "stock" }, "readWrite" ],
                        { w: "majority" }
                      )

8、 更新用户信息

db.updateUser( username, update, writeConcern )

db.updateUser(
   "<username>",
   {
     customData : { <any information> },
     roles : [
       { role: "<role>", db: "<database>" } | "<role>",
       ...
     ],
     pwd: passwordPrompt(),      // Or  "<cleartext password>"
     authenticationRestrictions: [
        {
          clientSource: ["<IP>" | "<CIDR range>", ...],
          serverAddress: ["<IP>", | "<CIDR range>", ...]
        },
        ...
     ],
     mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
     passwordDigestor: "<server|client>"
   },
   writeConcern: { <write concern> }
)

uodate 文档中的字段都是可选的,在更新用户信息时,有某个字段就更新那个字段的值,没有的就不更新。

注意,updateUser() 方法,设置了roles字段 会直接替换掉原有的 roles 数组,如果只是更新用户的角色,可以使用 db.grantRolesToUser() , db.revokeRolesFromUser() 方法

例子

use products
db.updateUser( "appClient01",
{
   customData : { employeeId : "0x3039" },
   roles : [
      { role : "read", db : "assets"  }
   ]
} )

9、 用户认证

db.auth( username, password)
允许用户从shell中对数据库进行身份验证
可以先连接到shell, 再用户认证

db.auth( <username> )

db.auth( <username>, passwordPrompt() )

db.auth( <username>, <password> )

db.auth( {
   user: <username>,
   pwd: passwordPrompt(),   // Or "<cleartext password>"
   mechanism: <authentication mechanism>,
   digestPassword: <boolean>
} )

返回 0 认证失败, 返回 1 认证成功

# 连接后在认证
use test
db.auth( "myTestDBUser", passwordPrompt() )

# 在连接mongo 时就 认证
mongo --username "myTestDBUser" --password --authenticationDatabase test --authenticationMechanism SCRAM-SHA-256

官网:
https://docs.mongodb.com/manual/reference/method/db.createUser/#mongodb-method-db.createUserhttps://docs.mongodb.com/manual/reference/method/db.dropUser/#mongodb-method-db.dropUserhttps://docs.mongodb.com/manual/reference/method/db.dropAllUsers/#mongodb-method-db.dropAllUsershttps://docs.mongodb.com/manual/reference/method/db.getUser/#mongodb-method-db.getUserhttps://docs.mongodb.com/manual/reference/method/db.getUsers/#mongodb-method-db.getUsershttps://docs.mongodb.com/manual/reference/method/db.revokeRolesFromUser/#mongodb-method-db.grantRolesToUserhttps://docs.mongodb.com/manual/reference/method/db.revokeRolesFromUser/#mongodb-method-db.revokeRolesFromUserhttps://docs.mongodb.com/manual/reference/method/db.updateUser/#mongodb-method-db.updateUserhttps://docs.mongodb.com/manual/reference/method/db.auth/#mongodb-method-db.auth