windows server安装MongoDB 并开启远程(账号密码验证)登录
1、安装MongoDB
为了方便,我直接下载的是MSI的安装包。
下载地址:https://www.mongodb.com/download-center/enterprise
版本4.2.2 ,系统选windows x64 x64 package选择msi
下载完后直接双击打开安装,安装时选择“Custom(自定义)”,安装过程比较简单,就是修改一下数据库和日志的存储路径之类的,这里就不说了,大家可以去搜索别人的博客。
这里有个坑,我刚开始勾选了 install MongoDB Compass(如下图),安装到后面卡住安装不下去,所以建议大家先不要选择,后面再到官网下载MongoDB Compass安装包来安装。
这边有个教程,不会安装的可以看这里:https://www.runoob.com/mongodb/mongodb-window-install.html
安装成功后如何测试:
开始—运行(快捷键Win+R)—输入CMD,
然后切换到mongodb的安装目录的bin文件夹
比如我安装在c:\mongoserver
然后用cmd命令打开mongo.exe
命令如下:
cd c:\mongoserver\bin
mongo.exe
如下图:
ok,安装成功,输入exit指令退出mongodb shell
2、创建数据库存储目录和日志文件存放目录
因为我虚拟机只有一个盘,因此我打算把数据库放在c:\mongodb\data目录,把日志文件放在c:\mongodb\logs 目录
那么我们先手工建立这两个文件夹,可以在cmd下创建或者自己在windows下创建这两个文件夹
打开代码编辑软件
写一个mongodb的配置
systemLog:
destination: file
path: c:\mongodb\logs\mongod.log
storage:
dbPath:c:\mongodb\data
net:
bindIp: 0.0.0.0
port: 27017
随便找个地方保存,后缀名为cfg或者conf
如我保存在mongodb安装目录下,取名为"mongod.cfg"
(注意,需要保存为utf8编码,避免出错,保存的时候注意选编码)
我们来说一下这个配置文件
systemLog下配置日志的相关参数
storage下配置的是数据库的存储位置
net 下是与网络相关的配置
systemLog和storage挺简单的都能看得懂,就是让日志和数据保存到我们刚才建立的那两个文件夹,这里就不讲了
敲黑板敲黑板!
重点在
net:
bindIp: 0.0.0.0
port: 27017
bindIp就是配置监听哪个IP,默认是监听127.0.0.1,因此只能本地访问,不能联机访问。因为有联机访问的需求,因此我们将监听的ip改为0.0.0.0,就能够联机访问了。
port是端口号,默认27017,可以根据自己的需要进行修改,注意防火墙放行这个端口就行了
3、用配置文件注册MongoDB服务
msi安装完貌似会自己注册服务,我没留意,不过没关系,我们在cmd下,运行这个命令,停止mongodb服务试试
net stop mongodb
能停就停,停不了更好,说明没这个服务。
如果没提示找不到服务的话,我们赶紧删除掉原来的服务呀
cmd命令:
sc delete mongodb
这样原来的服务就被删除掉了
为什么要删除掉原来的服务?
因为原来的服务里面设置的日志文件保存目录和数据保存目录,重点是兼听的端口都是默认的,无法通过联机访问,只能本地访问,需要改成刚才保存的那个配置文件里面的内容才能实现远程访问
ok,重新用我们刚才的配置文件 注册服务
cmd命令(本文说的都是在mongodb安装目录bin文件夹下执行)
mongod.exe -f "刚才cfg文件位置" --install
net start mongodb
主要有空格,如下
net start mongodb启动服务
4、创建一个root用户(超级管理员)
mongodb的用户角色如下:
read 让用户能够读取当前数据库中的任何集合的数据
readAnyDatabase 和read一样能够读取任何集合的数据,不过该用户可以读取任何数据库的,不在是指定数据库
readWrite 用户可以读写当前数据库中的任何集合,读写包括插入、删除、更新文档以及创建、重命名、删除集合
readWriteAnyDatabase 与readWrite权限一样,不过其可以操作所有数据库,不再只能操作指定数据库
dbAdmin 让用户能够读写当前数据库以及清理、修改、压缩、获取统计信息和执行检查
dbAdminAnyDatabase 与dbAdmin权限一样,不过其可以操作所有数据库,不再只能操作指定数据库
dbOwner 数据库所有者可以在数据库上执行任何管理操作。这个角色结合readWrite、dbAdmin、userAdmin
clusterManager 3.4版本以后新特性,提供集群的管理和监视操作。具有此角色的用户可以访问、配置和访问本地数据库,它们分别用于分片和复制中。
clusterMonitor 3.4版本新特性,提供对监视工具的只读访问权限,比如MongoDB Cloud Manager和OpsManager
hostManager 提供监视和管理服务器的能力。
clusterAdmin 让用户能够管理MongoDB,包括连接、集群、复制、列出数据库、创建数据库、和删除数据库
userAdmin 让用户能够在当前数据库中创建和修改用户账户
userAdminAnyDatabase 与userAdmin相同,过其可以操作所有数据库,不再只能操作指定数据库
backup 3.4新特性,提供备份数据所需的最小权限。该角色有足够的权限使用 MongoDB Cloud Manager、Ops
Manager的备用代理或者使用mongodumprestore 3.6新特性,提供对非系统集合的转换。提供从备份中恢复数据所需的特权,这些备份不会对数据进行重新配置。当还原数据时,此角色足够。
root 提供对所有资源的访问权限。集合了readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、backup这些角色的所有权限。
__system mongodb将此角色分配给表示集群成员的用户对象,该角色赋予其持有者对数据库中的任何对象采取任何操作。请将此角色用于代表应用程序或管理员的用户对象,而不是在异常情况下。
上述的用户角色表中,每个用户可以拥有多个角色,即用户可以同时拥有dbAdmin也可以拥有userAdmin
cmd下运行mongo.exe
我们先use admin这个库
然后创建一个root角色用户
cmd命令:
mongo.exe
use admin
db.createUser({user:"username",pwd:"password",roles:["root"]})
username和password两处替换成你自己的用户名和密码
验证是否创建成功:
db.auth("username","password")
提示1则添加成功
exit退出mongodb shell环境
5、重新注册服务
为什么又要重新注册服务
之前注册的服务只是为了能够让我们连上数据库并设置一个新的超级管理员账号,所以这个服务没有要求需要进行用户密码验证就能够连上,十分不安全,现在我们重新设置验证方式,开启用户名密码验证才能连上mongodb服务
停止并删除服务
net stop mongodb
sc delete mongodb
然后注册并启动服务
mongod.exe --auth --config "配置文件地址" --install
net start mongodb
服务启动成功后,现在输入mongo.exe
然后执行以下show dbs命令试试
发现什么数据库都看不到,因为没有登录没有权限
exit退出shell,
执行命令
mongo.exe -u username -p password
这里username 替换成你刚才设置的用户名 password设置为你刚才设置的密码
再次 show dbs就能看到系统里面有多少库了。
6、创建一个数据库并为其单独创建账号
进入mongodb shell,
use newDBName
db.createUser({user:"username_new",pwd:"password_new",roles:[{role:"dbOwner",db:"newDBName"}]})
newDBName替换成你新的数据库名称(有两处),username_new、password_new就是新的用户名和密码,用这个用户名和密码登录有对该数据库的所有访问权限,但是无法访问其它的数据库。
扩展:用MongoDB Compass图形化管理工具连接数据库
打开软件,菜单选择Connect ——》Connect to
然后选择Fill in connection fields individually
具体填写方式见下图