摘要:
简要记录了MongoDB数据库的常用命令+MongoDB数据库安全+Express服务端连接的要点
详情可参考MongoDB官方手册
net start MongoDB / net stop MongoDB
mongo #进入mongodb的命令解析器
show dbs #显示数据库列表
show users #显示用户
show collections #显示当前数据库中的集合(类似关系数据库中的表)
use #切换当前数据库(如果不存在则创建新的)
db.help() #显示数据库操作命令
db.foo.help() #foo为当前数据库下的集合
db.foo.find()
db.foo.find({a:1}) #在集合foo中查找键值为a和1的数据
db.dropDatabase() #删除当前使用的数据库
db.cloneDatabase(“127.0.0.1”) #克隆指定机器上的数据库的数据到当前数据库
db.copyDatabase(“mydb”, “temp”,”127.0.0.1”) #将本机的mydb的数据拷贝到temp数据库中
db.getName() #查看当前使用的数据库 等同于db
db.stats() #显示当前db状态
db.serverStatus() #查看数据库服务器状态
主要从两个方面保护数据库:禁止外网通过数据库端口访问数据;启用数据库安全认证。
MongoDB安装好后默认不启用安全认证,所以用户只要能连上服务器就能连接到mongoDB。mongoDB提供admin数据库,可用来管理所有数据库的信息,因此首先要为admin数据库创建一个超级用户,否则没有用户的认证是没有意义的。
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
Note: readWriteAnyDatabase option用来赋予读写其他数据库的权限,没有的话,该用户无法操作其他数据库
net stop MongoDB #关闭数据库服务
security:
authorization: enabled
net start MongoDB #重新启用数据库服务
此时use admin或use test, show users 或 show collections发现无法访问了。
use admin
db.auth("myUserAdmin","abc123")
返回1表示成功。
use foo
db.createUser(
{
user: "simpleUser",
pwd: "simplePass",
roles: [ { role: "readWrite", db: "foo" }]
}
)
使用时,首先切换到use foo, 然后db.auth(“simpleUser”, “simplePass”)
nodeJS环境使用mongoose package连接数据库,一般采用connect方法连接,但因为该方法不能监听数据库连接状态,因此常搭配mongoDB的connection实例使用。
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/foo", {
useFindAndModify: false,
useNewUrlParser: true,
user: "simpleUser",
pass: "simplePass"
});
const conn = mongoose.connection;
conn.on("connected", function(err) {
if (err) {
console.log("Cannot connect database! err: " + err);
} else {
console.log("Mongodb run successfully!");
}
});