MongoDB安装成功之后,默认没有权限限制,只要使用ip地址就能够连接使用了,只是学习或者测试使用没有问题,如果在正式的生产环境使用mongo同时又没有采取相关的限制措施,那你的mongo数据可就危险了。
遇到这种情况,又不方便增加其它的防护措施(如防火墙限定),那就只剩下给mongo数据库增加授权以保护我们的数据了。注意此处操作的是2.x版本的mongodb。
(一)安全管理
1、以安全认证模式启动
命令行切换至MongoDB的安装路径下D:\mongodb\,执行命令
bin\mongod --auth --dbpath D:\mongodb\data --logpath D:\mongodb\logs\log
2、添加用户
连接至mongo数据库,分次执行以下几条命令
>use admin;
switched to db admin
>db.addUser("root", "root");
{
"_id" : ObjectId("55420d79e67ba75a33b6ed93"),
"user" : "root",
"readOnly" : false,
"pwd" : "2a8025f0885adad5a8ce0044070032b3"
}
3、安全认证
db.auth("root", "root");
数据库安全认证。认证成功显示结果:
{ "user" : "admin", "readOnly" : false, "pwd" : "995d2143e0bf79cba24b58b3e41852cd" }
如果是认证用户,执行某些命令,可以看到正确执行结果,如下所示:
db.system.users.find()
{ "_id" : ObjectId("4ef940a13c1fc4613425acc8"), "user" : "admin", "readOnly" : false, "pwd" : "995d2143e0bf79cba24b58b3e41852cd" }
否则,认证失败,则执行相关命令会提示错误:
db.system.users.find()
error: { "$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1", "code" : 10057 }
4、为数据库写数据(同步到磁盘)加锁
db.runCommand({fsync:1,lock:1})
说明: 该操作已经对数据库上锁,不允许执行写数据操作,一般在执行数据库备份时有用。执行命令,结果示例如下:
{
"info" : "now locked against writes, use db.$cmd.sys.unlock.findOne() to unlock",
"ok" : 1
}
5、查看当前锁状态
db.currentOp()
说明:
查询结果如下所示:
{ "inprog" : [ ], "fsyncLock" : 1, "info" : "use db.$cmd.sys.unlock.findOne() to terminate the fsync write/snapshot lock" }
其中,fsyncLock为1表示MongoDB的fsync进程(负责将写入改变同步到磁盘)不允许其他进程执行写数据操作
6、解锁
use admin
db.$cmd.sys.unlock.findOne()
说明: 执行解锁,结果如下所示:
{ "ok" : 1, "info" : "unlock requested" }
可以执行命令查看锁状态:
db.currentOp()
状态信息如下:
{ "inprog" : [ ] }
说明当前没有锁,可以执行写数据操作。
(二)数据备份、恢复与迁移管理
1、备份全部数据库
mkdir testbak
cd testbak
mongodump
说明:默认备份目录及数据文件格式为./dump/[databasename]/[collectionname].bson
2、备份指定数据库
mongodump -d pagedb
说明:备份数据库pagedb中的数据。
3、备份一个数据库中的某个集合
mongodump -d pagedb -c page
说明:备份数据库pagedb的page集合。
4、恢复全部数据库
cd testbak
mongorestore --drop
说明:将备份的所有数据库恢复到数据库,--drop指定恢复数据之前删除原来数据库数据,否则会造成回复后的数据中数据重复。
5、恢复某个数据库的数据
cd testbak
mongorestore -d pagedb --drop
说明:将备份的pagedb的数据恢复到数据库。
6、恢复某个数据库的某个集合的数据
cd testbak
mongorestore -d pagedb -c page --drop
说明:将备份的pagedb的的page集合的数据恢复到数据库。
7、向MongoDB导入数据
mongoimport -d pagedb -c page --type csv --headerline --drop < csvORtsvFile.csv
说明:将文件csvORtsvFile.csv的数据导入到pagedb数据库的page集合中,使用cvs或tsv文件的列名作为集合的列名。需要注意的是,使用--headerline选项时,只支持csv和tsv文件。
--type支持的类型有三个:csv、tsv、json
其他各个选项的使用,可以查看帮助:
8、从向MongoDB导出数据
mongoexport -d pagedb -c page -q {} -f _id,title,url,spiderName,pubDate --csv > pages.csv
说明:将pagedb数据库中page集合的数据导出到pages.csv文件,其中各选项含义:
-f 指定cvs列名为_id,title,url,spiderName,pubDate
-q 指定查询条件
评论已关闭!