Ubuntu 安装 Mongodb(not authorized on admin to execute command)

本文介绍了解决MongoDB中因未正确配置用户权限而导致的错误提示方法。通过在admin数据库中为用户分配特定的角色来实现对指定数据库的操作权限。

错误提示:

2018-07-06T10:25:37.656+0800 E QUERY    [thread1] Error: listCollections failed: {
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listCollections: 1.0, filter: {}, $db: \"admin\" }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :

这是权限的问题:

角色授权分两种,一种是直接在当前库中创建用户并授予相关权限。如admin库中创建admin用户。另一种情况是

将在admin中创建的用户授予操作其他库的权限,相关授权命令如下:

授予角色:

db.grantRolesToUser("userName", [ { role:"<role>", db: "<database>"} ]) 

取消角色:

db.grantRolesToUser("userName", [ { role:"<role>", db:"<database>"} ]) 

下面我们在admin库中执行以下命令:

db.grantRolesToUser("admin", [ { role:"dbOwner", db:"test"} ]) ;
##admin  指的是用户名  test 指的要授权的数据库
<think> 首先,用户的问题是关于MongoDB报错:"Command failed with error 13 (Unauthorized): 'not authorized on recommend to execute command'"的含义。用户提到了参考站内引用,但我需要基于系统指令和用户可见层的要求来回答。 系统指令关键点: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 用户的问题是关于MongoDB错误13的,具体是"not authorized on recommend to execute command"。用户提供了引用[1]和[2],但它们似乎是与用户问题相关的参考,而不是直接的需求。我应该基于这些引用和我的知识来回答。 从引用[1]:它提到了MongoDB Command failed with error 13 (Unauthorized),原因是"not authorized on test to execute command"。这与我需要回答的错误类似。 引用[2]:是关于geoNear命令的错误,不是直接相关,但可能提供上下文。 用户说:"上述引用仅供参考,并不是用户真正的需求",所以我应该专注于用户的核心问题:解释错误13的含义。 错误13在MongoDB中是"Unauthorized",意思是授权失败。具体到这个消息:"not authorized on recommend to execute command","recommend" 可能是数据库名,"execute command" 可能是指特定的命令。 在MongoDB中,错误13通常表示认证或权限问题。用户没有足够的权限在指定的数据库上执行命令。 结构化我的回答: 1. **解释错误含义**:清晰地说明错误13是什么。 2. **原因分析**:为什么会出现这个错误?可能的原因。 3. **解决方案建议**:如何解决或调试。 4. **生成相关问题**:根据系统指令,在结束时生成相关问题。 5. **引用**:如果参考了引用,自然地添加引用标识。 用户提供的引用: - [^1]:关于error 13,Unauthorized。 - [^2]:关于geoNear错误,不直接相关。 所以,在回答中,我可以引用[^1]来解释这个错误。 回答结构: - 引言:确认错误。 - 解释含义:详细说明错误13。 - 可能原因:列出常见原因。 - 解决步骤:建议用户如何修复。 - 结尾:生成相关问题。 使用中文回答。 生成相关问题:基于这个错误,相关的问题可能包括: - 如何配置MongoDB用户权限? - 如何诊断MongoDB认证问题? - 其他常见MongoDB错误及其含义。 确保回答真实可靠:基于MongoDB文档和常见知识。 最终回答框架: 1. 解释错误含义。 2. 分析原因。 3. 提供解决方案。 4. 生成相关问题。 在回答中,自然地添加引用,例如在提到错误13时引用[^1]。 </think> ### MongoDB错误13的含义和解析 您遇到的MongoDB报错 `Command failed with error 13 (Unauthorized): 'not authorized on recommend to execute command'` 是一个常见的认证和权限问题。我会逐步解释这个错误的含义、原因和解决方案,确保回答基于真实可靠的MongoDB知识(参考官方文档和常见实践)[^1]。 #### 1. **错误含义** - **错误13 (Unauthorized) 的核心含义**:这表示MongoDB服务器拒绝了您的操作请求,因为当前用户没有足够的权限在指定数据库上执行该命令。 - `not authorized on recommend`:这里的 `recommend` 是数据库名称(可能是您的应用数据库),表明用户无权访问或操作该数据库。 - `execute command`:指的是您尝试运行的MongoDB命令(如 `find`、`insert` 或聚合操作),但权限不足导致失败。 - **为什么是“Unauthorized”**:在MongoDB中,错误代码13专门用于认证失败场景,类似于HTTP的401错误。它发生在用户认证成功但角色权限不足以执行特定操作时[^1]。例如,如果用户仅有只读权限,但尝试写入数据,就会触发此错误。 #### 2. **常见原因分析** 这个错误通常由以下原因引起(基于MongoDB的RBAC权限模型): - **权限配置不当**:用户未被授予在 `recommend` 数据库上的必要权限。例如: - 用户角色(如 `readWrite` 或自定义角色)缺少 `executeCommand` 权限。 - 角色未正确绑定到数据库,导致用户无法在 `recommend` 上执行操作。 - **认证问题**:连接字符串或认证信息错误。 - 例如,应用代码中使用错误的用户名、密码或认证数据库(如 `admin`),导致用户身份无效。 - **命令权限不足**:某些MongoDB命令(如 `aggregate`、`mapReduce` 或管理命令)需要特定权限。如果用户角色未包含这些权限,会报错。 - **环境因素**:在测试或生产环境中,权限策略可能不同。引用[^1]中的案例显示,在 `test` 数据库上出现类似错误,常因开发环境权限宽松而生产环境严格导致。 #### 3. **解决方案建议** 逐步解决此错误,推荐以下调试步骤: 1. **检查用户权限**: - 使用Mongo Shell登录管理员账户(如 `admin` 数据库),运行以下命令检查用户在 `recommend` 数据库的权限: ```javascript use recommend; db.getUser("your_username"); // 替换为您的用户名 ``` 输出中的 `roles` 字段应包含 `recommend` 数据库的适当角色(如 `readWrite`)。 - 如果权限不足,添加或修改角色: ```javascript db.grantRolesToUser("your_username", [{ role: "readWrite", db: "recommend" }]); ``` 2. **验证认证信息**: - 确认应用连接字符串正确。例如,在Spring Boot中,`application.properties` 应包含: ``` spring.data.mongodb.uri=mongodb://username:password@localhost:27017/recommend?authSource=admin ``` 确保 `authSource` 指定了认证数据库(通常为 `admin`),且用户名/密码无误。 3. **审查命令权限**: - 如果您执行的命令较复杂(如聚合查询),检查该命令所需的权限。例如,`aggregate` 命令需要 `read` 权限。使用 `db.runCommand({ rolesInfo: 1 })` 查看角色详情。 - 简化命令测试:先在Mongo Shell中手动运行相同命令,确认是否权限问题。 4. **其他通用步骤**: - **重启服务**:有时权限更改后需重启MongoDB服务生效。 - **日志分析**:检查MongoDB日志(`/var/log/mongodb/mongod.log`),过滤 `errorCode: 13` 获取详细上下文。 - **引用案例参考**:如引用[^1]所示,此错误常因权限配置疏忽引起,确保开发与生产环境权限一致[^1]。 如果以上步骤无效,建议查阅MongoDB官方文档或提供更多上下文(如完整错误日志)以进一步诊断。 #### 相关问题 基于此错误,以下是您可能感兴趣的相关问题: 1. 如何配置MongoDB用户角色和权限以预防Unauthorized错误? 2. MongoDB中常见错误代码(如error 16604)的含义及解决方法? 3. 在Spring Boot应用中如何正确处理MongoDB认证异常? 通过解决权限问题,您可以避免类似错误。如果问题持续,请提供更多细节以便深入分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值