read |
允许用户读取指定数据库 |
readWrite |
允许用户读写指定数据库 |
dbAdmin |
允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin |
允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
clusterAdmin |
只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
root |
只在admin数据库中可用。超级账号,超级权限 |
使用认证函数 db.auth("用户名", "密码") 进行身份认证。返回结果 1,则表示认证成功,返回 0 则表示认证失败。
MongoDB有一个用户管理机制,简单描述为管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。
管理员通常没有数据库的读写权限,只有操作用户的权限,我们只需要赋予管理员userAdminAnyDatabase 角色即可。另外管理员账户必须在 admin 数据库下创建。
由于用户被创建在哪个数据库下,就只能在哪个数据库登录,所以把所有的用户都创建在admin 数据库下。这样我们切换数据库时就不需要频繁的进行登录了。
先 use admin 切换至 admin 数据库进行登录,登录后再 use 切换其他数据库进行操作即可。第二次的 use 就不需要再次登录了。MongoDB 设定 use 第二个数据库时如果登录用户权限比较高就可以直接操作第二个数据库,而不需要登录。
管理员需要在 admin 数据库下创建,所以我们需要先切换至 admin 数据库。
通过 db.system.users.find() 函数查看 admin 数据库中的所有用户信息。
在 MongoDB 中可以使用 db.createUser({用户信息}) 函数创建用户
db.createUser({ user: "<name>", pwd: "<cleartext password>", customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ] }); user:用户名 pwd :密码 customData :存放用户相关的自定义数据,该属性也可忽略 roles :数组类型,配置用户的权限
示例:
db.createUser({user:"uaad",pwd:"uaad",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
管理员账户创建完成以后,需要重新启动 MongoDB,并开启身份验证功能。先通过 db.shutdownServer() 函数关闭服务。
普通用户需要由管理员用户创建,所以先使用管理员用户登录数据库
MongoDB 没有特定创建数据库的语法,在使用 use 切换数据库时,如果对应的数据库不存在则直 接创建并切换。
db.createUser({user:"testuser",pwd:"123456",roles:[{role:"readWrite",db:"test"}]})
如果我们需要对已存在的用户进行角色修改,可以使用 db.updateUser() 函数来更新用户角色。 注意:执行该函数需要当前用户具有 userAdmin 或 userAdminAnyDatabse 或 root 角色。
比如给刚才的 uaad 用户再添加 readWriteAnyDatabase 和 dbAdminAnyDatabase 权限。
db.updateUser("uaad", {"roles":[{"role":"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"}]})
更新用户密码有以下两种方式,更新密码时需要切换到该用户所在的数据库。注意:需要使用具有userAdmin 或 userAdminAnyDatabse 或 root 角色的用户执行:
使用 db.updateUser("用户名", {"pwd":"新密码"}) 函数更新密码 使用 db.changeUserPassword("用户名", "新密码") 函数更新密码
通过 db.dropUser() 函数可以删除指定用户,删除成功以后会返回 true。删除用户时需要切换到该用户所在的数据库。注意:需要使用具有 userAdmin 或 userAdminAnyDatabse 或 root 角色的用户才可以删除其他用户。