一、现象
服务不能访问mongodb的数据
nacos配置:mongodb://use:password@XXXX:27017/zhqc-cloud-sso-admin?authSource=admin&authMechanism=SCRAM-SHA-1
报错:
Caused by: com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'not authorized on XXX to execute command { find: "dyQueryTableBean", filter: { _id: "225668521588297728_456417333812920320_transportparkproject_top" }, limit: 1, singleBatch: true, $db: "zhqc-cloud-sso-admin", $readPreference: { mode: "primaryPreferred" } }' on server XXXX:27017
二、原因
1.检查用户
cd monogd的安装目录
然后执行use zhqc-cloud-sso-admin 数据库.
添加用户:db.createUser({user:"zhqc-cloud-sso-admin",pwd:"zhqc-cloud-sso-admin",roles:[{role:"dbAdmin",db:"zhqc-cloud-sso-admin"}]});
发现用户还是没有权限。
2.然后通过mongodb compass软件,访问mongodb数据。也是报类似的错。
3.接着就使用
db.createUser(
{
user:"mongo-blogis",
pwd:"blogis@123",
roles:[{role:"readWrite",db:"zhqc-cloud-sso-admin"}]
}
)
创建了一个新的用户,但是为readWrite,惊喜的发现可以查询数据。
此时,然后修改用户权限
db.grantRolesToUser('zhqc-cloud-sso-admin',[{role:'readWrite', db:'zhqc-cloud-sso-admin'}])
问题得到解决。
三、总结
服务引用mongodb:
uri: mongodb://user:password@ip:27017/数据库
可以使用软件:Mongodb Compass ,操作数据库添加db,colleciton,data
进入到mongdb 安装目录
cd /usr/local/mongodb/bin
./mongo 进入mongodb
use admin 使用admin数据库(默认就有数据库)
use sso-admin 使用sso-admin(不插入数据,不会创建,只有插入时,就会创建数据)
db.auth("root","root") 登录root用户名,密码为root
在zhqc-cloud-sso-admin数据库下添加用户
use zhqc-cloud-sso-admin
db.createUser({user:"zhqc-cloud-sso-admin",pwd:"zhqc-cloud-sso-admin",roles:["readWrite"]})
不能在非admin数据库下添加root用户,建议一般在非admin数据库添加readWrite用户。
修改用户密码
db.updateUser("zhqc-cloud-sso-admin",{pwd:"123456"})
删除用户
db.dropUser("zhqc-cloud-sso-admin")
查看当前数据库用户信息
show users;
查看当前数据库
show dbs;
给用户赋权限
db.grantRolesToUser('zhqc-cloud-sso-admin',[{role:'dbAdmin', db:'zhqc-cloud-sso-admin'}])
查看用户
db.getUser("zhqc-cloud-sso-admin")
root权限登录
添加数据
db.COLLECTION_NAME.insert(document)
db.Contacts.insert([{ name: "追逐时光者", phone: "15012454678" }, { name: "王亚", phone: "18687654321" }, { name: "大姚", phone: "13100001111" }, { name: "小袁", phone: "131054545541" }])
查看数据
db.COLLECTION_NAME.find()
更新数据:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
db.MyBooks.update({'bookName':'平方的世界'},{$set:{'bookName':'平凡的世界'}})
删除数据
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
db.colection.remove({'title': 'MongoDB'})