MongoDB添加用户认证

MongoDB添加用户认证,第1张

安装版本: db version v4.2.6

MongoDB默认安装并没有开启用户名密码登录,这样太不安全。首先开启一个无需验证用户的MongoDB服务后,进入MongoDB的shell控制台创建用户:

创建用户后,关闭连接,进入正题:

安装路径: D:PROGRA~1\MongoDB\Server\4.2\bin\

配置文件中添加 authorization 项 ,配置文件地址如下,没有可创建 D:PROGRA~1\MongoDB\Server\4.2\bin\mongod.cfg

配置文件内容如下:

配置好之后注册服务:

启动服务:

net start MongoDB

遇到的问题:

Error1:

F CONTROL [main] Failed global initialization: BadValue: dbPath requires an absolute file path with Windows services

Error2:

Error parsing YAML config file: yaml-cpp: error at line 2

以上都是配置文件配置问题,注意文件中不要出现单引号,双引号之类的;

配置项每层缩进都是4个空格,不要用tab缩进

Error3:

控制台显示服务未注册

这个一般是注册服务的命令有引号错误或者路径错误,检查有没有少斜线。正常的注册完服务并启动时,会显示服务已开启。

新开窗口进入mongodb的shell控制台验证:

参考链接:

Mongodb学习(4)通过配置文件启动mongod

windows系统,MongoDB开启用户验证

解决“Error parsing YAML

权限认证已ok

nodejs把数据存到mongodb里方法:

首先,创建一个数据库保存用户信息。

在这个数据库中创建一个名为 users 的集合,并插入一条用户信息。当前没有 users 集合,mongodb 会直接创建它。

>db.users.insert( { "userId":1, "name":"tom", "email":"tom@nodejs.org" })

查找信息可以使用 find 或者 findOne,区别在于 findOne 只会返回一个结果。

db.users.findOne( {"userId": 1})

返回的结果:

{

"_id" : ObjectId("5413be6e9e1c9f9c4386756d"),

"userId" : 1,

"name" : "tom",

"email" : "tom@nodejs.org"

}

驱动程序

编辑 package.json, 添加对于 mongodb 的引用。

{

"name": "express-api",

"version": "0.0.1",

"dependencies": {

"express": "2.5.9",

"ejs": "0.4.2",

"mongodb": "1.4.1"

}

}

重新 npm install 安装 mongodb 的驱动。

使用 MongoDB 数据库

修改代码,首先 require mongodb 模块,然后连接到 mongodb 数据库。

var mongo = require("mongodb")

var express = require("express")

var app = express.createServer()

app.set("view engine", "ejs")

app.set("views", __dirname + "/views")

app.set("view options", { layout: false })

app.get("/", function (request, response) {

response.render("index")

})

app.get("/user/:id", function (request, response) {

var id = request.params.id

console.log(id)

app.users.findOne({ "userId": +id }, function (error, doc) {

if (error) return next(error)

response.json(doc)

})

})

// connect mongodb

var server = new mongo.Server("127.0.0.1", 27017)

var db = new mongo.Db("members", server, {safe:true }).open(function (error, client) {

if (error) throw error

console.log("\033[96m + \033[39m connected to mongodb")

app.users = new mongo.Collection(client, "users")

client.ensureIndex("users", "userId", function (error) {

if (error) throw error

console.log("\033[96m + \033[39m ensured index.")

console.log("Web Server listening ......")

app.listen(3000)

})

})

注意现在是到数据库中查找用户。id 前面的 + 用来将表单中的字符串类型数据转换为需要的数字类型。

app.users.findOne({ "userId": +id }, function (error, doc) {

if (error) return next(error)

response.json(doc)

})

1. 以超级管理员身份(root@admin)登陆mongoDB other实例。

$ mongo  --port  27017  -u "root"  -p "Mongo@123"  --authenticationDatabase  admin

2. 没有testDB库,use testDB 会自动建库

>use testDB

3. 在 testDB库里建一个 testUsert业务用户(testUser@testDB),并授权

##########################

>db.createUser(

{

user : "testUser",

pwd : "Mongo@123",

roles: [ { role : "readWrite", db : "testDB" } ,

        { role : "dbAdmin", db : "testDB" } ,

{ role : "userAdmin", db : "testDB" } 

  ]

}

)

##########################

类似MySQL:  grant all  privileges  on  testDB.*  to testUser  identified by  "Mongo@123"

4. 退出 mongoDB shell

>exit

5. 测试走 testDB  认证库,登陆后只能在自己的库 testDB 里读写

$ mongo  --port  27017

>use testDB

>db.auth("testUser","Mongo@123")

测试数据写/读

>db.testTable.insert({"name":"Bogon"})

>db.testTable.find()

删除测试数据

>db.testTable.drop()

客户端工程jdbc连接字符串:

spring.data.mongodb.uri=mongodb://${username}:${password}@${xx.xx.xx.xx:27017,xx.xx.xx.xx:27017,xx.xx.xx.xx:27017}/testDB?authSource=testDB&authMechanism=SCRAM-SHA-1

注意:认证库 authSource 是此时的业务库  testDB,不是admin

如果还需其他选项,请参考MongoDB官方文档

MongoDB Manual/Connection String URI Format

https://www.mongodb.com/docs/manual/reference/connection-string/#connections-connection-options


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11751949.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存