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