mongodb - mongodb 身份验证和连接字符串如何工作?
问题描述
我的场景:我有一个 mongodb 实例正在运行,具有以下数据库:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
event-service 0.000GB
我还创建了一些用户。
当我登录 mongo 并检查现有用户时,结果如下:
> use admin
switched to db admin
> db.system.users.find().pretty()
{
"_id" : "admin.admin",
"userId" : UUID("0e41bcf5-9cdc-4fe5-8989-7db842cb3f1a"),
"user" : "admin",
"db" : "admin",
"credentials" : {
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" : "5BN0tb2b68yNMpRywAkj+w==",
"storedKey" : "9MVDlhYob4C2jcySGQrZKIj71NQ=",
"serverKey" : "U2CB/y/Mkubqm6J0w6pNfQFACV0="
},
"SCRAM-SHA-256" : {
"iterationCount" : 15000,
"salt" : "iDfSw3i7STGdlS0gqxIWylJVQebW53YOUri39w==",
"storedKey" : "xHXZYpz03tR2XS+dVa/lTBs+hzkF6lSd2xUmib8H0S4=",
"serverKey" : "OsjxxEc/f3KOlGdqyJ4N5/UyhzJts9ycVZsEOS4cxrA="
}
},
"roles" : [
{
"role" : "dbAdmin",
"db" : "event-service"
},
{
"role" : "root",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
{
"_id" : "event-service.eventadmin",
"userId" : UUID("c3e35487-4af1-448c-93cc-b1a83920949b"),
"user" : "eventadmin",
"db" : "event-service",
"credentials" : {
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" : "l0qqUmFl+74gh/EdAGdOcQ==",
"storedKey" : "IS4lmKjzb0+sDoKWc2hcO8YIZ8w=",
"serverKey" : "xXVTDAilaMVShGmUo19UatdexYs="
},
"SCRAM-SHA-256" : {
"iterationCount" : 15000,
"salt" : "JinBcUBW7V539Go/gKr9s6Vi15EJCNJRMQQnpQ==",
"storedKey" : "nX48I9NaSqrUD1RphTXmNDhHn1K1OZkVK8mzPHaBh5Y=",
"serverKey" : "K7qtrFivxRb6JDGruqYB9ETBbzpBg2zrgEo9cqCeX7k="
}
},
"roles" : [
{
"role" : "dbAdmin",
"db" : "event-service"
}
]
}
当我使用选项启用 mongodb 身份验证--auth
并尝试使用登录时mongo -u admin -p admin --authenticationDatabase event-service
,它说
错误:身份验证失败
我的问题:
为什么即使“管理员”用户具有角色 dbAmin 也无法针对“事件服务”数据库进行身份验证?
据我了解,这个命令
mongo -u eventadmin -p admin --authenticationDatabase 事件服务
将登录到 mongodb,使用默认的“test”数据库。并且相当于这个连接字符串
spring.data.mongodb.uri=mongodb://eventadmin:admin@localhost:27017/event-service
. 那是对的吗?
- 如果 2/ 正确,那么与此命令等效的连接字符串是什么?
mongo -u eventAdmin -p admin --authenticationDatabase event-service event-service
我想要的是,在我的服务使用此连接字符串成功访问 mongodb 后,它将自动连接到“事件服务”数据库,而不是默认的“测试”数据库。
解决方案
推荐阅读
- amazon-web-services - 当环境降级时,用户 aws EventBridge 如何重启实例
- c# - 在哪里以及如何编写这个 SQL 查询?
- mysql - 使用 Dockerfile 在 CentOS 7 上安装 MySQL 失败
- python - “时间戳”类型的参数不可迭代?
- python - 如何让 matplotlib 实际更新到最新版本?
- python - 尝试在 Lambda 函数中运行 ansible - 无法使依赖项达到可接受的上传大小
- javascript - Javascript:在 Reduce 函数中无法理解空初始化器
- r - 循环遍历数据表列并使用 for 循环应用 glm
- mongodb - 更好的方法创建 estructure 集合 mongodb,更新并插入子文档
- ios - 数据在 CollectionView 单元格中未正确显示?