mongoDB 方法 -- 用户管理 -- 创建、更新、删除
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.createUser
https://docs.mongodb.com/manual/reference/method/db.dropUser/#mongodb-method-db.dropUser
https://docs.mongodb.com/manual/reference/method/db.dropAllUsers/#mongodb-method-db.dropAllUsers
https://docs.mongodb.com/manual/reference/method/db.getUser/#mongodb-method-db.getUser
https://docs.mongodb.com/manual/reference/method/db.getUsers/#mongodb-method-db.getUsers
https://docs.mongodb.com/manual/reference/method/db.revokeRolesFromUser/#mongodb-method-db.grantRolesToUser
https://docs.mongodb.com/manual/reference/method/db.revokeRolesFromUser/#mongodb-method-db.revokeRolesFromUser
https://docs.mongodb.com/manual/reference/method/db.updateUser/#mongodb-method-db.updateUser
https://docs.mongodb.com/manual/reference/method/db.auth/#mongodb-method-db.auth
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号