MongoDB 系列文章
1 环境准备
- 操作系统:Windows 10
- 安装包:mongodb-win32-x86_64-2012plus-4.2.14.zip
2 安装包下载
官网下载地址:https://www.mongodb.com/try/download/community
3 安装启动
安装包有2种类型,一种是 zip 类型,一种是 msi 类型。其实两种都是一样的,前者是直接解压即可,后者是需要一步一步安装。推荐使用 zip 类型的安装包。
3.1 配置
在安装目录下创建 data 文件夹,并在 data 文件夹下再创建 db 文件夹和 log文件夹。db 文件夹用于存储数据库数据,log 文件夹用于存储数据库日志。
将 Mongo 安装目录的 bin 路径添加到环境变量 path 中。这样以后执行一些 mongo 相关的命令可以不用进入到安装路径的 bin 目录。
3.2 启动
有两种启动方式,命令行的方式启动和服务的方式启动。
3.2.1 命令行方式启动
可以通过 cmd 打开命令窗口,手动输入启动命令。当然,也可以创建一个启动脚本文件(例如 startMongo.bat
),内容为启动命令,这样每次只需要双击脚本文件即可启动 mongo 服务。
# --dbpath指定了数据存储的位置
mongod --dbpath E:\chDevTools\MongoDB\Server\3.2\data\db
# 指定数据存储的位置和日志存储的位置
mongod --dbpath E:\chDevTools\MongoDB\Server\3.2\data\db --logpath E:\chDevTools\MongoDB\Server\3.2\data\log\mongo.log
在浏览器输入 127.0.0.1:27017
进行验证,出现如下提示则代表启动成功。
或者在命令行执行 mongo 命令,进行验证。
3.2.2 服务的方式启动
在 Mongo 安装的目录下创建文件 mongod.config
,指定数据存储的位置,和日志存储的位置,文件内容如下:
在命令行窗口输入以下命令,使用--install 选项将 MongoDB 添加为 Windows 的服务。
mongod --config “E:\chDevTools\MongoDB\Server\3.2\mongod.config” --install -serviceName "MongoDB"
按住 Win 键和 R 键
,输入services.msc
,打开 Windows 服务列表,可以看到 MongoDB 服务已经添加成功,但是此时 MongoDB 服务还未启动(当然也可以在此右键手动启动和停止
)。
在命令行输入 net start MongoDB
启动服务。启动后在服务列表可以看到启动状态。
顺带介绍下停止服务 net stop MongoDB
和删除服务 sc delete MongoDB
的命令。
5 用户角色和密码
启动 MongoDB 服务默认是没有账号密码的,即连接上即可进行各种操作。我们可以使用 --auth 参数开启认证,这样连接需要认证之后才能执行操作。默认情况下,MongoDB 是没有管理员账户的,所以我们需要在 admin 数据库
中使用 db.createUser()
命令添加管理员帐号或其他角色。
5.1 内置角色
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:__system
5.2 创建管理员账号
切换到 admin 数据库,使用以下命令创建管理账号,拥有操作所有数据库权限。
> use admin
switched to db admin
> db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
>
5.3 用认证方式启动服务
停止服务(net stop 服务名
),将之前的服务删除(sc delete 服务名
),原有的 data\db 目录下的数据库数据可以不用删除。然后再添加 --auth
参数重新添加服务,最后重新启动服务。
mongod --config “E:\chDevTools\MongoDB\Server\3.2\mongod.config” --auth --install -serviceName "MongoDB"
5.4 验证
使用 mongo 命令连接上之后,如果不进行 db.auth("用户名","密码")
进行用户验证的话,是执行不了任务命令的,只有通过认证才可以。注意,每一个用户都需要在创建这个用户的认证库下进行认证。
> use adminuse admin
switched to db admin
> db.auth("admin","123456")
1
> show tablesshow tables
system.users
system.version
>
5.5 演示对单个数据库创建用户和密码
平常开发中,一般新项目会创建新的数据库,而且创建一个新的数据库用户仅对此数据库进行读写。
以下演示创建 chenpi 用户,密码为123456,并设置对 nobody 数据库读写的权限。注意,创建新用户前,先使用 admin 用户登录,因为我们刚才为 admin 用户设置了 userAdminAnyDatabase 权限。
# 先使用有创建用户权限的用户登录
> use admin
switched to db admin
> db.auth("admin","123456")
1
# 新用户的认证库
> use nobody
switched to db nobody
# 创建chenpi用户,密码123465,对nobody数据库有读写权限
> db.createUser({user:'chenpi',pwd:'123456',roles:[{role:'readWrite',db:'nobody'}]})
Successfully added user: {
"user" : "chenpi",
"roles" : [
{
"role" : "readWrite",
"db" : "nobody"
}
]
}
>
5.6 可视化工具连接
我们使用 MongoDB 可视化工具(例如 Studio 3T For MongoDB
)连接数据库。使用不同用户名和密码进行登录的时候,其可操作的数据库范围是不同的(角色设置原因)。
注意,当连接的数据库启动没有设置用户认证时,连接时不需要填写用户名和密码。
我们使用 chenpi 用户登录,因为我们设置它的角色是只对 nobody 数据库有读写权限,所以连接后只能看到 nobody 数据库。
当然,如果我们使用 admin 用户登录,注意,admin 用户当时是在 admin 数据库创建的,所以它的认证库是在 admin。
你会发现 admin 用户可操作的数据库范围和 chenpi 用户是不一样的。