Mongo 查询失败,错误代码 13 和错误消息“未授权”

Posted

技术标签:

【中文标题】Mongo 查询失败,错误代码 13 和错误消息“未授权”【英文标题】:Mongo Query failed with error code 13 and error message 'not authorized' 【发布时间】:2018-12-26 12:30:04 【问题描述】:

当我尝试在 mLab 上查询 mongo 实例时发生错误。我从 spring boot 应用程序中请求它。与数据库的连接稳定。下面是来自控制台的日志。

监控线程成功连接到服务器,描述为 ServerDescriptionaddress=ds131531.mlab.com:31531, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersionversionList=[3, 4, 15], minWireVersion=0,maxWireVersion=5,maxDocumentSize=16777216,logicalSessionTimeoutMinutes=null,roundTripTimeNanos=138364906,setName='rs-ds131531',canonicalAddress=ds131531-a.mlab.com:31531,hosts=[ds131531-a.mlab.com :31531],被动=[],仲裁者=[],主要='ds131531-a.mlab.com:31531',tagSet=TagSet[],选举Id=7fffffff0000000000000001,setVersion=1,lastWriteDate=2015 年 7 月 18 日星期三:22:37 CEST 2018, lastUpdateTimeNanos=20828794373992

这是准确的错误信息

查询失败,错误代码 13 和错误消息“未授权在比萨店执行命令 find: "product", filter: , batchSize: 2147483647 " 在服务器 ds131531.mlab.com:31531;嵌套异常是 com.mongodb.MongoQueryException:查询失败,错误代码 13 和错误消息“未授权在比萨店执行命令 查找:“产品”,过滤器:,batchSize:2147483647 ”在服务器 ds131531.mlab .com:31531

如果我从 mongo shell 进行相同的查询,一切正常。 我已向发出请求但没有任何帮助的用户添加了 readWrite 角色和我的自定义 readProduct 角色角色。 dbOwner 和 read 是内置角色。

用户 mongo 角色:

"_id" : "pizza-db.kubiakb",
"user" : "kubiakb",
"db" : "pizza-db",
"roles" : [
    
        "role" : "readProduct",
        "db" : "pizza-db"
    ,
    
        "role" : "read",
        "db" : "pizza-db"
    ,
    
        "role" : "dbOwner",
        "db" : "pizza-db"
    
]

读取产品角色


"role" : "readProduct",
"db" : "pizza-db",
"isBuiltin" : false,
"roles" : [ ],
"inheritedRoles" : [ ],
"privileges" : [
    
        "resource" : 
            "db" : "pizza-db",
            "collection" : "product"
        ,
        "actions" : [
            "find"
        ]
    
],
"inheritedPrivileges" : [
    
        "resource" : 
            "db" : "pizza-db",
            "collection" : "product"
        ,
        "actions" : [
            "find"
        ]
    
]

编辑: Spring应用程序.properties

spring:
  profiles: heroku
  data:
    mongodb:
      uri: mongodb://login:pass@ds131531.mlab.com:31531/pizza-db

【问题讨论】:

请把你的spring boot mongo配置 它表示您没有在名为“pizza-store”的数据库上获得授权。看起来您的数据库名为“pizza-db”,而您正尝试在名为“pizza-store”的数据库上运行命令。 @tfogo 这怎么可能? 数据库名称“pizza-store”你熟悉吗?是否有可能在您的代码中的某个地方不小心对名为“pizza-store”而不是“pizza-db”的数据库运行命令?如果您无法找出错误说明应用程序正在尝试连接到“pizza-store”的原因,您能否通过电子邮件向 support@mlab.com 发送您的问题?他们将能够进一步帮助您。 【参考方案1】:

问题解决了。问题是我的 application.yml 文件中有更多配置文件,并且我没有在配置文件 heroku 中声明数据库名称,因此它正在从默认配置文件中读取数据库名称。 application.yml 文件下方

spring:
    data:
      mongodb:
        database: pizza-store
        uri: mongodb://localhost:27017

price-point-multiplier : 0.1

---
spring:
  profiles: docker
  data:
    mongodb:
      database: pizza-store
      uri: mongodb://mongodb:27017

---
spring:
  profiles: heroku
  data:
    mongodb:
      uri: $MONGODB_URI

【讨论】:

【参考方案2】:

我在另一个数据库上创建了具有角色的用户。我花了几个小时才得到它。 我知道你修复了,但也许可以帮助其他开发者。

db.createUser(user: "right_user", pwd: "right_pass",
roles: [ role: "readWrite", db: "WRONG_DB" ], passwordDigestor: "server", mechanisms: ["SCRAM-SHA-1","SCRAM-SHA-256"])

【讨论】:

以上是关于Mongo 查询失败,错误代码 13 和错误消息“未授权”的主要内容,如果未能解决你的问题,请参考以下文章

Sails-mongo 适配器,标准化错误消息

Netezza 的 Aginity 工作台不会为大型查询提供语法错误

impala-shell 查询失败并出现错误 (13)

本地服务器工作,在线服务器失败 - Mongo?

准备好的语句失败(带有错误消息!)

xcode 构建失败,错误代码 65,没有指示性消息