创建DB管理用户
mongodb有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。
管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase角色即可。
另外管理员账户必须在admin数据库下创建。
小技巧:
- 由于用户被创建在哪个数据库下,就只能在哪个数据库登录,应该把所有的用户都创建在admin数据库下。先use admin数据库,进行登录,登录后use其他数据库进行操作,其中第二次的use就不需要在登录。MongoDB设定use第二个数据库时如果登录用户权限比较高就可以操作第二个数据库,而不需要登录。例如:root、userAdminAnyDatabase、dbAdminAnyDatabase 等。
1. 切换到Admin库
刚通过./mongo进入到客户端工具时,是没有使用数据库的。可以使用use切换数据库。
管理员需要在admin数据库下创建,所以我们需要切换到admin数据库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PujEg44R-1611573489635)(https://uploader.shimo.im/f/8ybQWXgFjAH6Hu3t.png!thumbnail?fileGuid=TVXCXINSEMcmZvkf)]
查看admin中的用户
我们可以通过db.system.users.find()函数来查看admin库中的所有用户信息。
目前在admin库中没有用户,所以查无结果。
db.createUser函数
在MongoDB中可以使用db.createUser({用户信息})函数创建用户。
db.createUser({
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
});
1)user:新建用户名。
2)pwd:新建用户密码。
3)customData:存放一些用户相关的自定义数据,该属性也可忽略。
4)roles:数组类型,配置用户的权限。
创建管理员用户
我们现在需要在admin库中创建一个名为bjsxt的管理员用户,密码为bjsxtpwd。
db.createUser({user:'bjsxt',pwd:'bjsxtpwd',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
也可以直接赋予root角色
db.createUser({user:'jinken',pwd:'jinken',roles:[{role:'root',db:'admin'}]})
创建成功后会看到如下提示:
5. 关闭MongoDB
在管理员账户创建完成后,我们需要重新启动MongoDB,并开启验证。
重新启动函数:db.shutdownServer()。必须在./mongodb客户端命令行中才能输入
使用权限方式启动MongoDB
在默认的情况下MongoDB是不开启用户认证的。如果我们添加用户,那么需要开启用户认证机制。通过修改mongodb.conf配置文件,在文件中添加auth=true即可。
修改完成后启动MongoDB。
用户认证
创建管理员后,需要认证方可使用该用户,否则会提示需要认证。
认证函数:db.auth(‘用户名’,’密码’)
如果结果返回1,则表示认证成功,返回0则表示认证失败。
登录成功后可查询用户
创建账号后向新数据库插入document的流程
重点:必须理解使用admin登录,登录后切换到对应数据库。和后面使用Navicat是一样的。
启动客户端
# ./mongo
使用admin数据库
# use admin
登录
# db.auth("bjsxt","bjsxtpwd")
切换到sxt数据库下。在MongoDB中如果数据库不存在use时会新建数据库。
# use sxt
切换到admin下
# use admin
注意:一定要在admin下创建,否则无法登录。
# db.createUser({user:"sxt",pwd:"sxtpwd",roles:[{role:"readWrite",db:"sxt"}]});
退出客户端,Ctrl+C
# ./mongo
使用admin数据库
use admin
登录
# db.auth("bjsxt","bjsxtpwd")
切换
# use sxt
新增数据。其中sxt为collection名。
# db.sxt.insert({key:"value"});
查看数据
# db.sxt.find()
更新用户角色
如果我们需要对已存在的用户的角色做修改,那么我们可以使用db.updateUser()函数来更新用户角色。注意,该函数需要当前用户具有userAdminAnyDatabase或者更高的权限。
更新角色语法格式
db.updateUser("用户名", {"roles":[{"role":"角色名称",db:"数据库"},{"更新项2":"更新内容"}]})
流程
# use admin
使用高权限用户登录
# db.auth("bjsxt","bjsxtpwd")
修改
# db.updateUser("sxt",{"roles":[{role:"readWriteAnyDatabase",db:"sxt"}]});
更新用户密码
更新用户密码有两种方式:
1)使用db.updateUser()函数更新密码。
2)使用db.changeUserPassword()函数更新密码
更新密码方式一
使用db.upateUser()函数将bjsxt用户的密码修改为sxt。
注意:执行此命令的用户需要具有userAdmin或root权限
语法格式
db.updateUser(“用户名”,{“pwd”:“新密码”})
如果未提示任何信息则表示更新成功。退出当前客户端重新连接认证即可。
重新使用bjsxt用户登录
更新密码方式二
使用db.changeUserPassword()函数将bjsxt用户的密码修改为sxtpwd。
删除用户
通过db.dropUser()函数可删除指定用户。删除成功后会返回true。在删除用户时需要切换到执行创建用户命令所在数据库。注意:需要使用具有userAdminAnyDatabse角色管理员用户才可以删除其他用户。
流程
sxt用户在admin数据库下创建,所以需要先切换到admin下
# use admin
删除.打印true表示删除成功
# db.dropUser("sxt")