权限认证
MongoDB
刚完成安装的时候,默认是不需要
进行用户验证,直接可以连接mongod服务的实例,对数据库进行各种读写
操作,执行各种命令,这样的好处是方便进行测试。在生产环境
部署MongoDB
服务实例时,就必须开启安全认证
,为数据库连接设置管理账号。
第一步:创建超级管理用户
在开启安全认证之前,我们首先要建立一个超级管理员账号
,可进行其它用户
的添加
,删除
,修改
操作。root
角色的用户可以做MongoDB
的各种操作,没有任何限制,类似于mysql
的root
账号。
1 2 3 4 5 6
| db.createUser({ user:'admin', pwd:'123456', roles:[{role:'root',db:'admin'}] })
|
第二步:修改mongodb数据库配置文件
文件路径:mongodb安装目录\bin\mongod.cfg
,找到#security
,改成如下配置,表示要开启访问控制。
注意:最好是完全复制下面代码,因为mongodb
配置文件严格对待空格符
和缩进符
。
1 2
| security: authorization: enabled
|
第三步:重新启动mongodb
第四步:用超级管理员账户链接数据库
重启后若再次输入mongo
连接数据库show dbs
时就会报错或者不显示数据库列表了,必须使用账号密码
进行登录
1 2 3 4
| mongo admin -u 用户名 -p 密码
mongo 192.168.1.200:27017/test -u 用户名 -p 密码
|
第五步:给每一个数据库创建一个用户权限
假如公司来了一个新员工,不能把超级管理员管理权限给他,需要给他一个数据库权限,他只能操作该数据库,不能对其他数据库进行增删改查。
1 2 3 4 5 6 7 8
| db.createUser( { user:"eggadmin", pwd:"123456", roles:[{role:"dbOwner",db:"eggcms"}] } )
|
node连接数据库的时候需要配置账户密码
1
| const url = 'mongodb://admin:123456@localhost:27017';
|
常用命令
1 2 3 4
| show users db.dropUser("eggadmin") db.updateUser("admin",{pwd:"password"}); db.auth("admin","password");
|
Nodejs调用Mongodb驱动
第一步:初始化项目
第二步:安装mongodb包
第三步:连接数据
app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const { MongoClient } = require("mongodb");
const uri = "mongodb://admin:123456@127.0.0.1:27017"
const client = new MongoClient(uri,{ useUnifiedTopology: true });
async function run(){ try { await client.connect(); const database = client.db('czschool'); const collection = database.collection('teacher'); const query = { name: 'revan' }; const person = await collection.findOne(query); console.log(person); }finally{ await client.close() } }
run().catch(console.dir)
|
第四步:启动
在项目终端输入node app.js
1
| D:\Work\Test\node-server-learning>node app.js
|
结果:
1 2 3 4
| { _id: 603a0f729ce5d7b58f23fea0, name: 'revan', age: 18, ic_no: 1 }
|
Mongoose
第一步:安装
第二步:配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| const mongoose = require('mongoose');
mongoose.connect('mongodb://czschooladmin:123456@127.0.0.1:27017/czschool',{ useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false, useCreateIndex: true })
const StudentSchema = mongoose.Schema({ name : String, age : Number, address : String, tel : String })
const Student = mongoose.model('Student',StudentSchema);
Student.find({},(err,doc)=>{ if(err){ console.log(err); return; } console.log(doc); })
|
第三步:操作数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Student.find({},(err,doc)=>{ if(err){ console.log(err); return; } console.log(doc); })
let s = new Student({ name : '张三', age : 19, address : '上海市浦东新区', tel : '17628282822' })
s.save((err)=>{ if(err){ console.log(err); return; } console.log('成功') })
Student.updateOne({"_id":"603e3a56838a6037f87082b3"},{"name":"Revan"},(err,doc)=>{ if(err){ console.log(err); return; } console.log('修改成功'); })
Student.deleteOne({"_id":"603e3a56838a6037f87082b3"},(err,doc)=>{ if(err){ console.log(err); return; } console.log('删除成功'); })
|