mongodb创建用户密码

自从接手这个项目以来,真的被坑惨了。测试服的mongodb经常被删,原因是没有设置账户密码,相应的端口也没有限。只要知道连接地址谁都可以删库。这要归功于mongodb的默认机制。就这样竟然度过了两年多,我一来就特么删库。

以mongo3.4.24为例,首先在mongo.conf中开启认证。还没创建用户密码的可以创建用户了再开启。

security:
   authorization: enabled

登录,创建用户并授权,登录用admin库的用户

普通登录:bin/mongo 127.0.0.1:27017
认证登录: bin/mongo 127.0.0.1:27017 -u user -p password --authenticationDatabase admin

查询和删除用户命令

use admin
db.system.users.find();
db.system.users.remove({});

创建admin的用户,注意admin这个库要给root权限,否则开启权限验证登录一些操作会显示没有权限

use admin
db.createUser({ user: "root", pwd: "password", roles:[{role:"root",db: "admin"}]});
db.auth("root","admin");

特别注意:mongodb和spring-mongodb默认的认证机制不同,会导致项目中mongo连接不上!
 1、mongodb的认证机制有2种:SCRAM-SHA-1和MONGODB-CR。3.0之后版本默认为:SCRAM-SHA-1;
 2、spring-mongodb默认为:MONGODB-CR,并不支持设置认证方式;

db.system.version.findOne({"_id":"authSchema"});
db.system.version.insert({"_id":"authSchema","currentVersion":3})
db.system.version.update({"_id":"authSchema"},{$set:{"currentVersion":3}})

创建其他数据库的用户,mongo的每个库的用户是独立的。你有多少个库就要创建多少个用户,即使用户名一样也要。

use addressbook
db.createUser({user:"user",pwd:"password",roles:[{role:"readWrite", db:"addressbook"},{role:"dbAdmin",db:"addressbook"},{role:"dbOwner",db:"addressbook"}]});
db.auth("zaixiudb","password");
use imRoom
db.createUser({user:"user",pwd:"password",roles:[{role:"readWrite", db:"imRoom"},{role:"dbAdmin",db:"imRoom"},{role:"dbOwner",db:"imRoom"}]});
db.auth("zaixiudb","password");

* 这里要特别注意权限从小到大,如下刚开始从网上copy了这句创建用户。

db.createUser({user:"user",pwd:"password",roles:[{role:"read", db:"addressbook"},{role:"readWrite", db:"addressbook"},{role:"dbAdmin",db:"addressbook"},{role:"dbOwner",db:"addressbook"}]});

spring boot老是连接不上,报权限错误Command failed with error 13 (Unauthorized): 'not authorized on imapi to execute command

mongo compass却可以连接上,原因是springboot项目中有写入操作。因此去掉read权限,readWrite权限生效。

开启conf中的认证模式,重启启动mongodb生效。

springboot中的配置

mongoconfig.uri=mongodb://user:password@127.0.0.1:28018
mongoconfig.dbName=imapi
mongoconfig.mapPackage=cn.xyz.mianshi.vo
mongoconfig.roomDbName=imRoom
mongoconfig.username=user
mongoconfig.password=password
mongoconfig.connectTimeout=20000
mongoconfig.socketTimeout=20000
mongoconfig.maxWaitTime=20000
原文地址:https://www.cnblogs.com/zeussbook/p/15472820.html