设为首页 收藏本站
查看: 1024|回复: 0

[经验分享] mongodb管理与安全认证

[复制链接]

尚未签到

发表于 2018-10-27 10:41:33 | 显示全部楼层 |阅读模式
  mongodb数据管理
  数据的导出、数据导入
  数据导出 mongoexport [使用mongoexport -h查看参数]
  数据导入 mongoimport [使用mongoimport -h查看参数]
  导入导出json数据实例
mongoexport -d mydb -c user -o d:/mongdbback/user.dat  
--mydb是要导出的表所属的数据库
  
--user是要导出的集合名c表示collection
  
--user.dat是导出后的文件名
  
mongoimport -d mydb -c user d:/mongdbback/user.dat
  
--mydb 数据导入的目标数据库
  
--user 数据导入的目标集合
  
--d:/mongdbback/user.dat 待导入的数据文件存放路径
  导入导出csv数据
  CSV格式良好,主流数据库都支持导出为csv的格式,所以这种格式非常利于异构数据迁移.
mongoexport -d mydb -c user --csv -f >
--导出csv格式  
--f 指定要导出的列的名字
  
mongoimport -d mydb -c user --type csv --headerline --file d:/mongodbback/user_csv.data;
  
--mydb 数据导入的目标数据库
  
--user 数据导入的目标集合
  
--type表示导入的文件格式
  
--headerline 表明不导入第一行,因为第一行是列名
  
--d:/mongodbback/user_cvs.data 待导入的数据文件存放路径
  数据备份、数据恢复
  数据备份mongodump
  数据恢复mongorestore
备份实例  
mongodump -d mydb    //备份mydb数据库
  
此时会在当前目录下默认创建一个dump目录,用于存放备份出来的文件,也可以指定备份存放的目录使用-o
  
mongodump -d mydb -o d:/databack/
  
恢复实例
  
mongorestore -d mydb d:/databack/mydb/
  
数据备份是为了发生灾难事件后可以恢复数据,但是不幸总是存在的,即没有数据备份,好在MongoDB内建了修复功能.可以尝试修复受损文件,如果Mongdb不正常关闭,启动服务时会看到一堆警告信息.
  
修复所有数据最简单的方法就是在mongod启动时加上--repaire参数.
  
修复单个数据库可以再mongodb的shell里边执行repaireDatabase命令,如
  
>use test
  
switched to db test
  
>db.repaireDatabase();
  
{“ok” : 1}
  克隆collection
  克隆collection是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.
远程克隆  
例如,将192.168.1.32上test下的user集合克隆到本地
  
db.runCommand({cloneCollection:”test.user”, from:”192.168.1.32:27017”});
  
本地克隆
  
由于mongoDB没有提供本地克隆collection的命令或方法,所以需要写一个循环插入的方案来完成这项工作.
  
例如,将user集合中的数据克隆一份到taruser中.
  
> db.user.find().forEach( function(x){ db.taruser.insert(x); } );
  
> db.taruser.find();
  复制数据库
  使用copyDatabase(fromdb,todb,fromhost)命令来实现复制数据库
远程复制数据库  
> db.copyDatabase("from_db1","to_db2","192.163.1.167");
  
本地复制数据库
  
> db.copyDatabase("to_db1","to_db2","localhost");
  刷新磁盘
  在mongoDB中使用”db.runCommand({fsync:1})”命令将内存中尚未写入磁盘的信息写入磁盘,并锁住对数据库更新的操作,但读擦做可以继续.
  数据压缩
  repairDatabase命令是MongoDB内置的一个方法,调用这个方法MongoDB会扫描数据库中的所有数据,并将通过导入/导出来重新整理数据,整理磁盘碎片
  mongoDB中可以使用db.collection.storageSize()和db.collection.totalSize()命令来搜集压缩命令执行前后集合所占用磁盘空间情况
> db.user.storageSize();  
> db.user.totalSize();
  
> db.repairDatabase();
  
{ "ok" : 1 }
  
> db.user.storageSize();
  
> db.user.totalSize();
  捕获异常
  MongoDB的写是异步的,返回给客户端成功但写不一定成功,db.getLastError命令有2个功能,即当MongoDB在写操作时,默认不会等数据写完后才返回,这是可以通过这个命令来保证写入是否是成功的.
  查看活动进程
> db.currentOp();  
字段说明:
  
opid:操作进程号,可以使用db.killop(opid)
  
op:操作类型(查询、更新等)
  
ns:命名空间,指操作的是哪个对象
  
query:如果操作类型是查询的话,将显示具体的查询内容
  
inLock:指名锁定的类型.-1代表读锁,0代表无锁.1代表写锁.
  用户安全和认证
  限制特定IP地址访问
  这样可以避免来自公网上的恶意***.
MongDB可以指定对外服务的绑定,默认设置为空,即绑定在本机所有可用IP上,对于商业系统,出于安全考虑,可以绑定内网,减少外网访问避免***.  
只需要启动时加bind_ip即可.
  >mongod --bind_ip 169.254.180.132    //启动mongodb时绑定ip169.254.180.132
  
此时客户端想访问169.254.180.132上的服务器,就需要显示地指定连接的IP地址是169.254.180.132.
  
eg.    >mongo 169.254.180.132
  设置监听端口
  MongoDB默认的监听端口是27017,为了安全,一般都会修改这个监听端口.
eg.    >mongod --bind_ip 169.254.180.132 --port 9888    //启动mongodb时绑定ip 并修改端口  
同理.客户端连接时需要指定ip跟端口
  
eg.    >mongo 169.254.180.132:9888
  设置登录用户名和口令
  mongodb默认是没有用户名和口令的,启动后,可以直接用mongoDB连接,并且对所有的库具有root权限,为了安全,必须给其设置用户名和口令.
  只需要再启动的时候,指定auth参数.就可以阻止客户端的访问和连接,如下
eg.>mongod -auth --dbpath=../data --logpath=../logs/mongodb.logs  想要登录验证模块生效,必须在admin库中添加一个用户,同时要指定auth参数.
D:\program files\mongo\bin>mongo  
MongoDB shell version: 1.8.1
  
connecting to: test
  
> use admin
  
switched to db admin
  
> db.addUser("root","root123");
  
{
  "user" : "root",
  "readOnly" : false,
  "pwd" : "81c5bca573e01b632d18a459c6cec418"
  
}
  
> db.auth("root","root123");
  
>
  
此时建立了系统root用户.
  也可以对某个特定的数据库设置用户,这样权限的细粒度划分,也方便进行用户管理.
  注意:建立指定权限的用户只能用系统用户来操作.
  为mydb创建一个用户名为mydbusr口令为123的用户
D:\program files\mongo\bin>mongo -uroot -proot123 localhost:27017/admin  
MongoDB shell version: 1.8.1
  
connecting to: localhost:27017/admin
  
> show dbs;
  
admin   0.03125GB
  
local   (empty)
  
test    (empty)
  
> use mydb;
  
switched to db mydb
  
> db;
  
mydb
  
> db.addUser("mydbusr","123");
  
{
  "user" : "mydbusr",
  "readOnly" : false,
  "pwd" : "4dbfed60224bbcd7eccbd2da993a8029"
  
}system
  
> show tables;
  
system.indexes
  
.users
  
> db.system.users.find();
  
{ "_id" : ObjectId("50f6acdd22bc514e46426dda"), "user" : "mydbusr", "readOnly" : false,
  
60224bbcd7eccbd2da993a8029" }
  
> db.auth("mydbusr","123");
  
>
MongoDB权限验证
  在MongoDB中,服务启动默认是没有权限验证的,就安全性方面来说,这肯定是不行的,所以需要加上权限验证。
  既然是要进行权限验证,那肯定是得有用户的吧,所以权限验证的第一步就是给MongoDB库添加用户。
  启动MongoDB服务端,然后启动MongoDB客户端,在客户端使用命令给MongoDB库添加用户,看代码:
> db.addUser("jiangzhichao","jzc19880316");{"user": "jiangzhichao","readOnly": false,"pwd": "f7559cfe0bc0a305f82c0d83664538fd"}  小知识:在admin库里面添加用户是全局的,也就是说在admin中添加用户,在其他库里面也是适用的。
  要给MongoDB的服务器端添加权限验证,需要在启动MongoDB的服务的时候添加--auth参数,代码如下:
d:\mongodb\bin>mongod --dbpath d:\mongodb\data --logpath d:\mongodb\log\mongodb.log --logappend --serviceName MongoDB --auth --installall output going to: d:\mongodb\log\mongodb.logCreating service MongoDB.Service creation successful.Service can be started fromthe command line via 'net start "MongoDB"'.d:\mongodb\bin>net start "MongoDB"Mongo DB 服务正在启动 .Mongo DB 服务已经启动成功。  在这里我是以服务的方式启动MongoDB服务,第一条命令是安装服务,第二条就是启动服务了。
  服务都已经启动了,那就剩下打开客户端了,这个就简单了,看代码:
d:\mongodb\bin>mongoMongoDB shell version: 1.8.2connecting to: test> show dbs;Mon Oct 24 21:54:13 uncaught exception: listDatabases failed:{"assertion": "unauthorized db:admin lock type:-1 client:127.0.0.1","assertionCode": 10057,"errmsg": "db assertion failure","ok": 0}  看到了吧,show dbs命令报异常了,再看异常的具体信息,unauthorized db:admin lock,权限验证不通过啊!
  那好,下面就进行权限验证,这里唠叨一下,在进行权限验证的时候,先退出客户端,或者另起一个客户端,代码如下:
d:\mongodb\bin>mongo admin -u jiangzhichao -p jzc19880316MongoDB shell version: 1.8.2connecting to: admin> show dbs;admin  0.078125GBlocal  (empty)test  (empty)  命令格式:mongo [数据库名] -u [用户名] -p [密码]
  上面的show dbs可以执行并看到结果了。
  到此,权限验证的过程就算完成了。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627043-1-1.html 上篇帖子: MongoDB 安装、主从配置、以及监控 下篇帖子: MongoDB实战(1)MongoDB安装与存储结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表