2020-01-15 12:55:00 +0800
categories: dotnet
MongoDB权限配置,设置用户名和密码,并进行相关操作
添加用户
一般情况下,mongodb数据库的接口是开放的,这样所有人都可以访问进行修改,这样在内网中使用很方便,但是在公网上,就要考虑权限的问题,所以我们先给数据库添加用户,并设置权限
- 在控制台输入mongo,如果显示无法识别该命令,是因为你没有将mongo的bin文件夹放到环境变量里,可以放进去,或者在cd到bin文件夹下,一般是C:\Program Files\MongoDB\Server\4.2\bin,进行操作
- use admin,跳转到admin数据库
- db.createUser({user:“username”,pwd:“123456”,roles:[ { role: “readWrite”, db: “wx_applet” } ]}),添加用户,添加成功后,会显示Successfully adder user提示,username是用户名称,123456是用户密码,可以根据自己进行设置
- show users 查看结果,可以看到刚刚创建的用户
开启权限验证
创建好用户之后,现在我们并没有真正使用权限验证,需要再重新设置权限验证
- 在bin文件夹中找到mongod.cfg,打开
- 添加如下字段
security:
authorization: enabled
- 保存,重启mongodb服务,若重启失败,可能是上面字段的缩进问题,重新调整,重启成功
- 再回到控制台窗口,输入mongo
- 执行show dbs,发现没有结果,use 到一个数据库后,show collections显示需要权限,说明权限验证开启成功
- 这时 use admin,记住一定要切换到admin数据库,不然无法验证成功
- db.auth(‘username’,‘123456’);提示1,显示验证成功
- show dbs成功列出所有数据库
Node中使用权限验证
- 在创建MongoClient时,使用以下代码进行设置
this.client = new MongoClient(this._dbUrl, {
useNewUrlParser: true,
auth: {
user: userName,
password: password
}
});
- userName是刚刚设置的用户名,即"username",password是用户密码
- 这些信息可以存储到package.json中config字段,使用类似于process.env.npm_package_config_username的字段来进行读取相关信息,其他信息修改config_后面的相关字段即可(前面的字段代表package.json中config的username字段)
egg-mongose中使用权限设置
- 在config/config.default.js中添加以下字段
mongoose: {
client: {
url: 'mongodb://IP:27017/dbName',
options: {
auth: { authSource: 'admin' },
user: 'username',
pass: '123456',
},
},
},
- 重启服务,即可使用权限验证
数据库备份使用权限验证
使用了权限验证之后使用mongodump命令备份文件夹也需要权限验证,但是我们刚刚都是在mongo里面进行权限验证,mongodump是在外面执行,其实mongodump也提供了相应参数使用权限验证,即:
mongodump --username username --password 123456 --authenticationDatabase admin -h 127.0.0.1 -d dbname -o F:\copy\db\config
以-或者–开头的都是参数名,后面是相应的参数,根据自己需求进行设置
参考资料
mongodb API 文档