**方案3:启动基于角色的登录认证功能**
在admin数据库中创建用户,如用户名supper,密码supWDxsf67%H(此处为举例说明,请勿使用此账号密码)。
1)在未开启认证的环境下,登录到数据库
[mongodbrac3 bin]$ ./mongo 127.0.0.1:27028 (此处修改了默认端口)
MongoDB shell version: 2.0.1
connecting to: 127.0.0.1:27028/test
2)切换到admin数据库
>
> use admin
> switched to db admin
>
>
>
3)创建管理员账号
账号不要设置为常见账号,密码需要满足一定的复杂度,长度至少八位以上,并包括大小写字母、数字、特殊字符混合体,不要使用生日、姓名、身份证编号等常见密码。
说明:MongoDB从V3版本开始取消使用addUser方法,采用db.createUser方法创建用户。
db.addUser(“supper”, “supWDxsf67%H”) 或
{ “n” : 0, “connectionId” : 4, “err” : null, “ok” : 1 }
db.createUser({user:“supper”,pwd:“supWDxsf67%H”,roles:[“root”]})
{
“user” : “supper”,
“readOnly” : false,
“pwd” : “51a481f72b8b8218df9fee50b3737c44”,
“_id” : ObjectId(“4f2bc0d357a309043c6947a4”)
}
管理员账号将在system.users中。
db.getCollectionNames()
[ “system.indexes”, “system.users”, “system.version” ]
4)验证用户是否创建成功
db.auth(“supper”,“supWDxsf67%H”)
exit
bye
结束进程,重启MongoDB服务。
./mongod --dbpath=/path/mongodb --bind_ip=10.0.0.1 --port=27028 --fork=true logpath=/path/mongod.log --auth &
**说明:**
* admin.system.users中将会保存比在其它数据库中设置的用户权限更大的用户信息,拥有超级权限,也就是说在admin中创建的用户可以对mongodb中的其他数据库数据进行操作。
* MongoDB系统中,数据库是由超级用户来创建的,一个数据库可以包含多个用户,一个用户只能在一个数据库下,不同数据库中的用户可以同名。
* 特定数据库(比如DB1)的用户User1,不能够访问其他数据库DB2,但是可以访问本数据库下其他用户创建的数据。
* 不同数据库中同名的用户不能够登录其他数据库,比如DB1、DB2都有user1,以user1登录DB1后,不能够登录到DB2进行数据库操作。
* 在admin数据库创建的用户具有超级权限,可以对mongodb系统内的任何数据库的数据对象进行操作。
* 使用db.auth()可以对数据库中的用户进行验证,如果验证成功则返回1,否则返回0。
db.auth()只能针对登录用户所属的数据库的用户信息进行验证,不能验证其他数据库的用户信息。
## 风险自查
如果您是MongoDB管理员,也可以使用以下方式检查是否有进一步的入侵行为:
* 查看MongoDB的日志是否完整,并确认执行删除数据库的源IP地址和时间、行为;
* 检查MongoDB帐户以查看是否存在未添加密码(admin)账户(使用db.system.users.find()命令);
* 检查GridFS以查看是否有人存储任何文件(使用db.fs.files.find()命令);
* 检查日志文件以查看谁访问了MongoDB(show log global命令);
* 您可以使用云安全中心应急漏洞功能一键核查。
## 2、MongoDB:安装后无法启动问题解决过程记录
## 1. 环境
Ubuntu 18.04;
MongoDB version v3.6.3;
## 2. 问题 & 解决
2.1. Unit mongod.service not found. 报错
报错
>
> Failed to start mongod.service: Unit mongod.service not found.
>
>
>
解决:
– 创建文件
sudo vim /etc/systemd/system/mongodb.service
– 追加文本
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
– 保存退出,再次启动发现还是报错。
## 2.2. NonExistentPath: Data directory /data/db not found., terminating 报错
报错
>
> 2020-08-18T04:16:47.802+0000 I STORAGE [initandlisten] exception in
> initAndListen: NonExistentPath: Data directory /data/db not found.,
> terminating 2020-08-18T04:16:47.802+0000 I CONTROL [initandlisten] now
> exiting 2020-08-18T04:16:47.802+0000 I CONTROL [initandlisten]
> shutting down with code:100
>
>
>
解决
sudo mkdir /data/db/
再次启动,问题解决。
sudo mongod
## Mongo数据库不设置用户权限,直接登录数据库
## MongoDB角色创建命令
1.创建超级管理员用户
db.createUser({user:‘root’,pwd:‘123456’,roles:[‘root’]}) Successfully added user: { “user” : “root”, “roles” : [ “root” ] }
2.查看创建的用户
db.system.users.find();
3.创建普通用户,有testdb数据库readWrite的权限
db.createUser({user:‘jim’,pwd:‘jim123456’,roles:[{role:‘readWrite’,db:‘testdb’}]})
默认mongo是没有用户认证的,如果要想让用户认证生效,需要重启mongo数据库实例 先关闭实例 mongod --shutdown -f /etc/mongod.conf 再加–auth启动实例 mongod --auth --fork -f /etc/mongod.conf
## 测试一下效果
[root@~]# mongo
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { “id” : UUID(“709083d5-fe98-4b21-919d-7ffce4ced0e5”) }
MongoDB server version: 4.2.2
show dbs;
show collections;
Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
![img](https://img-blog.csdnimg.cn/img_convert/1804cbf22fb77205b5f4a6c81410d93b.png)
![img](https://img-blog.csdnimg.cn/img_convert/9189ad0f490b40568ddae06561a6a1b0.png)
![img](https://img-blog.csdnimg.cn/img_convert/8236c6a4b4607668dce50ed2d278ab3b.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**
ction names by parsing connectionStatus
[外链图片转存中…(img-6VePPTSy-1719231206181)]
[外链图片转存中…(img-3GrZH1kG-1719231206182)]
[外链图片转存中…(img-Xpn8Ui5U-1719231206182)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!