win环境下MongoDB安装与配置成auth验证服务

版权声明:爱我请告诉我 https://blog.csdn.net/hardly555/article/details/81187755

今天重新安装了MongoDB(Windows),并且想要把它配置成需要验证用户密码的服务。
1.官网上获取msi文件并安装
MongoDB社区版
这里写图片描述

下载完成后直接运行msi文件
注意要选择custom
这里写图片描述

这里写图片描述

之后就一直next即可(记得不要勾选install compass【图形化工具】,勾选的话安装很慢)

本人是安装到D:/MongoDB文件夹
这里写图片描述

测试验证:
win+R再输入cmd
进入MongoDB目录的bin文件夹
执行如下命令 mongod.exe –dbpath D:\MongoDB\data
注意图片与我的命令有出入,但是大致意思是这样(原因是这图是我参考别人的,路径有出入)
这里写图片描述

如果执行成功之后回显示如下信息:
这里写图片描述

27017是mongodb的默认端口 可通过浏览器输入网址测试是否成功: 127.0.0.1:27017 安装成功之后访问会显示该提示
这里写图片描述

以上已经安装成功MongoDB
参考文章:https://blog.csdn.net/pizi995/article/details/53171139

配置环境变量
原因:不配置环境变量的话每次要启动MongoDB服务时候都要进入到MongoDB目录的bin目录中执行mongod.exe文件

今天我们说一下如何配置MongoDB的环境变量及好处,因为每次我们启动MongoDB服务的时候
都需要在黑窗口(dos窗口)中切换到MongoDB所在路径,然后执行 net start mongodb(代表已经安装了window服务) 命令来开
启服务。所以每次手动开机开启MongoDB服务的时候都特别的麻烦,为了解决这个问题。我们可以
将MongoDB配置到系统环境变量中。 下次在开机的时候可以直接打开黑窗口或者以管理员身份打
开(dos窗口)输入 net start mongodb(安装服务会稍后讲解) 命令,无需切换到MongoDB所在路径进行启动。

将你的 bin 目录加入到环境变量中的path中,保存退出。
验证:在控制台输入mongod –help会有帮助文档

分两步走
1.新建系统变量MONGODB_HOME
2.在系统变量加上%MONGODB_HOME%\bin
这里写图片描述

这里写图片描述

参考链接:https://blog.csdn.net/pizi995/article/details/53171851
到这里你就可以在任何路径下启动MongoDB服务器了。

接下来我们将mongodb放到windows的服务中

认识两个命令

删除windows服务
sc delete servicename(doc窗口下)

新建MongoDB的Windows服务
mongod.exe –logpath d:/MongoDB/log/mongodb.log –logappend –dbpath d:/MongoDB/data –directoryperdb –auth –serviceName MongoDB –install

参数解析
–install:安装MongoDB服务
–logappend:以每天为单位自动切割日志
–serviceName:安装Windows服务时使用的服务名
–logpath:MongoDB日志输出文件名称。虽说该参数直译是“日志路径”,其实要指定的是一个具体的完整文件名。
–dbpath:指定MongoDB数据存放的路径。这个就是最关键的参数了,不仅该目录要存在,并且最好不要以“\”结尾。
–directoryperdb:这个参数很好理解,让MongoDB按照数据库的不同,针对每一个数据库都建立一个目录,所谓的“目录每数据库”。

–auth:开启验证的服务,即需要登录验证

完成后打开服务后 (win+R->services.msc) 发现 MongoDB 已经在我们的服务项中了
若安装成功,在管理服务中会新增一个MongoDB服务并且能够启动成功。、
这里写图片描述

若这个服务新建成功,对特定的数据库需要特定的用户才能操作
安装完成并启动服务后再任何路径下输入mongo皆可进入MongoDB shell
这里写图片描述

安装完Windows服务后,
需要新增管理用户
需要创建一个用户在admin数据库中,它的权限用来新增或者赋予别的用户对别的数据库的操作权限
1.use admin(转到admin库)
2.新增数据库管理员
db.createUser(
{
user: “mama”,
pwd: “123456”,
roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
}
)
role的可选值与解析
具体角色:

read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

3.验证
db.auth(‘mama’,’123456’)

这里写图片描述

注意我们创建的mama这个角色时针对admin库的,他没有权限操作admin以外的数据库。即数据库是跟着用户走的。而且他也只能拥有管理创建用户的权限,没有查看用户的权限即查看admin库中的collection的权限,不过root权限用户有

这里写图片描述

mama角色无法查看admin下的collection
root无法连接到littleblog数据库

以下为用mongoose连接MongoDB

//数据库连接
var mongoose = require('mongoose');
var config={mongodb:'mongodb://leo:[email protected]:27017/littleblog'};
//leo为账号 123456为密码,littleblog为数据库名称
mongoose.connect(config.mongodb, { useNewUrlParser: true }, function(error) {
    //这个回调怎么都会执行,但是error可能是null
    // if error is truthy, the initial connection failed.
    if (error) {
        console.log('error');
    }
});
var db = mongoose.connection;
db.on("error", function(error) {
    console.log(error);
    throw error;
});

db.on("open", function(error) {
    if (error) {
        console.log(error);
        throw error;
    }
    console.log("db connect success.");
});

整个过程遇到的问题
1.启动MongoBD时报错:window不能再本地计算机启动MongoDB,如下:
这里写图片描述

解决:D:\MongoDB\data目录下全部删除
这里写图片描述

2.另一种方式新建windows服务(不成功,倘若哪位大神知道解决方法,恳请告知小弟)
1.D:\MongoDB\bin下新建一个mongodb.conf文件
内容如下:

#数据库数据存放目录
dbpath= D:\MongoDB\data
#数据库日志存放目录
logpath=D:\MongoDB\log\mongodb.log 
#以追加的方式记录日志
logappend = true 
#端口号 默认为27017
port=27017
#以后台方式运行进程
fork=true 
#开启用户认证
auth=true
#启用日志文件,默认启用
journal=true 
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true

参考:https://www.jianshu.com/p/5844fdfa9511
2.新建服务的命令为


sc create MongoDB binPath="D:\MongoDB\bin\mongod.exe --service --config=D:\MongoDB\bin\mongodb.conf"

结果:能创建成功,但是services.msc中启动不了服务
参数错误

其他参考文章(注以下文章只是参考帮助理解,并没有按照其步骤完全执行)
https://www.imooc.com/article/28742?block_id=tuijian_wz
https://blog.csdn.net/woainimax/article/details/78208588
https://yq.aliyun.com/articles/70338

猜你喜欢

转载自blog.csdn.net/hardly555/article/details/81187755