MongoDB 摆好正确操作数据库的姿势

Posted ink-kai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB 摆好正确操作数据库的姿势相关的知识,希望对你有一定的参考价值。

上篇文章讲了如何安装MongoDB以及碰到的一些问题。

这次,讲一下MongoDB的一些常规操作。

 

设置可远程连接

服务开启后,查看设置的bind_ip是否可远程

总所周知,linux运维对端口信息的查看都是使用netstat

netstat -nltp

 技术图片

 

local:访问端口的方式,0.0.0.0是对外开放端口;127.0.0.1说明只对本机访问,外面访问不了

Address:端口

Foreign Address:对外开放,一般都是0.0.0.0:*

Program name:此端口是使用的程序挂载此端口

设置MongoDB用户和密码

使用mongo命令连接MongoDB客户端

mongo

# 切换admin

use admin

# 添加超级用户

db.createUser({user:‘用户名‘,pwd:‘密码‘,roles:[‘root‘]);

# 创建普通用户

db.createUser({user:‘用户名‘,pwd:‘密码‘,roles:[{role:‘userAdminAnyDatabase‘,db:‘admin‘}]);

技术图片

 一般情况下,mongoDB 数据库都要建立认证连接,这就需要用户对数据库创建管理员和用户认证,而对于mongoDB 而言,在创建管理员和用户时,分配的roles 是决定用户操作数据库权限的关键

role类型:

1. 数据库用户角色:read、readWrite
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
3. 备份恢复角色:backup、restore
4. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
5. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
6. 超级用户角色:root

read:授予User只读数据的权限

readWrite:授予User读写数据的权限

dbAdmin:在当前db中执行管理操作

dbOwner:在当前db中指定任何操作

UserAdmin:在当前db中管理User

backup:备份

restore:还原

readAnyDatabase:授予在所有数据库上读取数据的权限

readWriteAnyDatabase:授予在所有数据库上读写数据的权限

userAdminAnyDatabase:授予在所有数据库上管理User的权限

dbAdminAnyDatabase授予管理所有数据库的权限

clusterAdmin:授予管理集群的最高权限

clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.

clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限

hostManager:管理Server

root:只在admin数据库中可用。超级账号,超级权限

# 查看当前数据库用户

show users

# 查看所有数据库

show dbs

技术图片

报错:身份认证失败(说白了,就是没有登录呗)

解决办法:认证(就相当于登录了)

use admin

db.auth(‘用户名‘,‘密码‘)

 

总结:

增加用户

db.createUser({user:‘用户‘,pwd:‘密码‘,roles:[{role:‘用户角色‘,db:‘目标数据库‘}]})

删除用户(2种方法,db.system.users指的是所有数据库中的指定用户,db只删除本数据库中指定用户)

db.dropUser(‘用户‘)

db.system.users.remove({_id:‘用户id‘})

db.system.users.remove({user:‘用户名‘})

技术图片

  修改用户

(1)授予用户角色权限

使用db.grantRolesToUser(‘用户‘,[role:‘角色权限‘,db:‘对应数据库‘])

技术图片

(2)撤销用户的角色权限

使用db.revokeRolesFromUser(‘操作用户‘,[{role:‘要移除的角色权限‘,db:‘对应数据库‘}])

技术图片

(3)修改密码

db.changeUserPassword(‘要修改密码的用户‘,‘修改后的密码‘)

技术图片

 

MongoDB常用命令:

show dbs  显示数据库列表

show collections  显示当前数据库中的集合(就是关系型数据库中的表)

show users  显示用户(当前数据库的)

use <db name>  切换当前数据库,如果当前数据库不存在则创建该数据库

db.help()    显示数据库操作命令

db.foo.help()  显示集合操作命令,foo指的是集合(表)

db.foo.find()  对于当前数据库的foo集合进行数据查找(没有条件,默认查找所有数据)

db.foo.find({a:1})  对于当前数据库的foo集合进行查找,条件是数据中有一个属性是a,值是1

其他命令:

db.dropDatabase()  删除当前使用的数据库

db.cloneDatabase(‘ip‘)  将指定机器上的数据库的数据克隆岛当前数据库

db.copyDatabase(‘mydb‘,‘temp‘,‘127.0.0.1‘)  将本机上的mydb的数据复制到temp数据库

db.repairDatabase()  修复当前数据库

db.getName()  查看当前使用的数据库,也可以直接使用db

db.stats()  显示当前db状态

db.version()  查看当前的db版本

db.getMongo()  查看当前db的连接机器地址

db.serverStatus()  查看数据库服务器的状态

 

注意:

1.root用户

创建完超级管理员后,到数据库创建自己的用户时,一定要切换到所在数据库上去创建用户,不然创建创建用户还是属于admin

2.查看用户

show users是查看当前数据库所有用户,想要查看所有用户:

use admin

# 这时候需要验证先用户

db.auth(‘用户名‘,‘密码‘)

# 查看所有用户

db.system.users.find().pretty()

3.一些经典错误

(1)过多用户验证,这个需要退出命令行,重新认证,一次登录只认证一个用户

技术图片

  (2)对于使用密码、换端口登录的伙计,这里有必要讲一下授权和认证,这两概念也是有点东西的

 

 创建所有用户都在admin库下的system.users集合下,有如下字段:

技术图片

 

 

 db字段是用于authentication用的,就是连接MongoDB的时候,指定--authenticationDatabase选项的值。

roles字段里面的db是指这个用户具体是在db中扮演着什么样的角色(读、写、只读、只写、授权等),所以这个db和外面的db要分清楚了。

mongo -u 用户 -p 密码 -authenticationDatabase ‘认证的数据库‘ -port 端口

可以去看看mongo --help哦

 

(3)上篇MongoDB安装的时候有个问题,现在是时候解决了!!!

使用命令行启动MongoDB的话,必须指定dbpath,我就是配置文件的dbpath路径有问题,所以运行报错,无法启动。

还有一点就是:MongoDB目录必须有执行权限哦,要不然mongod命令执行会出错,我现在命令行启动MongoDB碰到的最多的两个错误(后面会写一篇专门的错误解决方法)

对于在服务器上配置MongoDB的操作差不多就是这些了,对于深入学习MongoDB的话,后面看吧

以上是关于MongoDB 摆好正确操作数据库的姿势的主要内容,如果未能解决你的问题,请参考以下文章

技术 | Node.js 连接 MySQL 的正确姿势

解锁MongoDB replica set核心姿势

Linux发邮件的正确姿势~(Linux发送邮件操作流程)

UITableView之局部刷新的正确使用姿势

Python 操作 MySQL 的正确姿势

论坛私信营销的正确操作姿势