mongodb-创建用户及数据详解
mongodb-创建用户及数据详解, 参考: https://www.jianshu.com/p/f5afc6488f9e
MongoDB的用户创建更新及删除
前两天公司要求使用mangoDB完成商品数据的导入和查询, 苦逼在一天弄好之后, 晚上被架构师告知
– 架构师:”你那边做好密码授权登陆了吗?”
– 我:”没有啊, 我在本地测试的, 不是连服务器的本地吗? 要用户名密码干啥?”
– 架构师:”mongo又不是只给你项目用的, 大家都要用, 怎么能没有账号密码呢?”
– 我:”哦!”
– 架构师:”给你账号密码, 你去吧!”
然后, 我发现, 架构师给我的是admin库的root身份账号. 由于是第一次接触mangodb, 真心不太会, 然后又苦逼学习了一番, 在此留下我的学习笔记
mongo -version :
1 | ➜ ~ mongo -version |
如何新建账号, 分配角色, 以及如何关联数据库
- 如何启动mongo在之前的笔记中(mongodb的下载安装)
已经提到了, 下面说说如何以授权认证方式启动
在基本启动mongodb服务的命令上
1 | mongod --dbpath [数据存放path] // 基本命令 |
那么开启授权启动后, 需要怎么登陆呢??
如果是本机的话:
1 | mongo |
mongo命令就能够直接登陆了, 但是:
先使用命令看看我当前使用的数据库名
1 | >db |
我当前使用的库是test库,
接下来我们做一次数据插入
1 | > db.Hello.insert({name:'World'}) |
可以看到结果, 没有授权在test上库执行inset命令(not authorized on test to execute…), 这就是说, 我们没有权限操作
这里简单聊一下mongodb中所有角色 权限链接
这里只列举最基本, 不做详细说明, 因为我也是学习者, 具体链接已给出, 详情可直接点击链接
分类 | role(角色) | 简要说明 |
---|---|---|
数据库用户角色(DB User Roles) | read readWrite |
为某个数据库创建一个用户, 分配该数据库的读写权力 |
数据库管理员角色(DB Admin Roles) | dbAdmin dbOwner userAdmin |
拥有创建数据库, 和创建用户的权力 |
集群管理角色(Culster Administration Roles) | clusterAdmin clusterManager clusterMonitor hostManager |
管理员组, 针对整个系统进行管理 |
备份还原角色(Backup and Restoration Roles) | backup restore |
备份数据库, 还原数据库 |
所有数据库角色(All-Database Roles) | readAnyDatabase readWriteAnyDatabase``userAdminAnyDatabase``dbAdminAnyDatabase |
拥有对admin操作的权限 |
Superuser Roles(超级管理员) | root |
dbOwner userAdmin userAdminAnyDatabase 这几个角色角色提供了任何数据任何用户的任何权限的能力,拥有这个角色的用户可以在任何数据库上定义它们自己的权限 |
我现在手上有一个root角色, 我们先使用root角色来我们的数据库创建一个用户
- 首先, 我们需要切换到admin数据库, 为什么呢? 因为我们的root角色用户是创建在admin数据的, 必须要到admin数据库去完成授权
1 | > use admin //切换到admin数据库 |
- 完成授权之后, 我们要携带root身份, 切换到我们对应的数据库, 那么先看看我们有哪些数据库再切换
1 | > show dbs //展示所有数据库 |
- 切换数据库之后, 我们为testDB创建一个用户
1 | >db.createUser({user:'test',pwd:'test',roles:[{role:'readWrite',db:'testDB'}]}) |
- 然后我们再切换到admin库, 看一下我们创建的用户, 这里先说一下, 为什么要到这个切换到testDB上创建用户, 因为只有在这里创建的用户才是这个数据库的用户, 才能在这里完成授权, 但是创建用户的信息存放在admin库中
1 | > use admin |
可以看到_id
说明我们的用户test
是属于testDB
数据库的. 并且分配的数据库也是testDB
那我们来测试一下test用户的读写吧!
为了避免之前授权root用户的影响, 我们先退出客户端 ,再登陆授权
1 | > use testDB |
那么简单创建角色并且分配数据库等方法就说完了.
总结一下:
- 一定要切换到对应的数据库去创建用户, 否则在进行认证的时候, 会提示找不到用户
- 一定要到对应的数据库上去认证用户, 否则会认证授权失败
- 不是所有人都能操作admin数据库, 分配给用户权限的时候,一定要谨慎
下面说说修改用户角色, 其实角色弄清楚了, 创建用户清楚了, 剩下都是命令简单介绍. 因为都一样
更新用户信息
```shelldb.updateUser([用户名],{用户对象, 与创建时一样}) //其实后面还有一个可选参数, 一般不写. 需要自行百度writeConcern
1
2
3
4
那么这里简要说一下, 创建用户时和更新用户时,需要属性`user` `pwd` `roles`
成功修改后没有任何提示. 如下:db.updateUser(‘test’,{user:’test’,pwd:’admin’,roles:[{role:’read’,db:’testDB’}]}) //修改密码 并且 //修改角色为只读
1
2
3
4
5
6
以上需要注意的就是, `roles`数组里的对象数据`role` `db`两个都需要给出, 否则会出现错误
剩下就没什么好说的了
- 删除用户use testDB
switched to db testDB
db.dropUser(‘test’)
true```
注意哦, 修改用户和删除用户等等, 都和创建用户一样,需要切换到数据库管理员的身份哦, 也就是需要先切换到admin
库, 完成认证, 才能进行后面的操作. 同样需要到对应数据库去操作用户. 因为用户是跟着库走的.