MongoDB开启的 --auth 之后,无法使用 db.eval() 问题

本文介绍了解决MongoDB开启auth认证后执行eval命令时出现的权限问题。通过创建具有anyAction权限的角色并分配给特定用户,使得该用户能够执行eval等敏感操作。

     MongoDB开启auth验证后,除了创建用户和授权角色外,在执行一些特殊操作的时候,还是会“not authorized”错误,如在执行eval时会报:

     

Command failed with error 13: 'not authorized on *** to execute command { $eval: "function()...

 

解决方案:

 

     在官网  http://docs.mongodb.org/manual/reference/command/eval/#dbcmd.eval 有一段描述:

 

If authorization is enabled, you must have access to all actions on all resources in order to run eval. Providing such access is not recommended, but if your organization requires a user to run eval, create a role that grants anyAction on anyResource. Do not assign this role to any other user.

 

解决步骤:

 

1)不带--auth参数启动数据库,所以不需要帐号即可连上MongoDB。

 

2)新建一个角色,比如叫 sysadmin,需要先切换到admin库进行如下操作:

 

db.createRole({
    role: "sysAdmin",
    privileges: [{
        resource: {
            anyResource: true
        },
        actions: ['anyAction']
    }],
    roles: []
}

 

3)新建一个用户,比如叫 sysUser,授权sysAdmin角色

 

db.createUser({"user":"sysUser","pwd":"123456",roles:[]});

 

db.grantRolesToUser("sysUser",[{role:"sysAdmin",db:"admin"}]);

    特别注意,grant时db一定是指明"admin"

 

4)开启--auth,试一下吧

<think>好的,我需要帮助用户解决MongoDB离线安装包的安装和升级方法。首先,我需要回顾用户提供的引用内容,看看有没有相关的信息。用户提到了几个引用,其中引用[1]、[3]、[4]涉及到MongoDB的安装步骤,尤其是引用[4]详细描述了离线编译安装的过程,而引用[2]则是关于Docker安装的方法,可能不适用于离线安装包的情况。 用户明确想要的是离线安装包的安装和升级方法,而不是通过Docker或其他方式。所以重点应该放在引用[1]、[3]、[4]上。引用[1]提到解压安装包到指定目录,并可能涉及环境变量配置。引用[4]详细描述了编译安装的步骤,包括环境变量、配置文件、目录创建和启动命令,这可能适用于从源代码编译安装的情况。但用户问的是离线安装包,通常指的是预编译的二进制包,所以可能需要调整步骤,比如不需要编译,而是直接解压和配置。 接下来,我需要组织安装步骤。通常,离线安装MongoDB的步骤包括:下载合适的安装包,解压到目标目录,设置环境变量,创建数据和日志目录,编写配置文件,启动服务。升级的话,可能需要下载新版本的安装包,停止旧服务,备份数据,替换二进制文件,重新启动服务,并进行测试。 需要注意用户提到的不同引用中的配置细节,例如引用[4]中的环境变量配置、数据目录路径、配置文件参数等。同时,要确保用户正确设置权限和路径,避免常见问题,比如目录不存在或权限不足。 在升级部分,需要强调备份的重要性,以及如何替换二进制文件。可能还需要处理数据迁移或兼容性问题,尤其是大版本升级时。引用[4]中提到了strip命令来减小可执行文件的大小,但升级时可能不需要这一步,除非用户重新编译。 此外,用户可能遇到的问题包括依赖缺失、配置文件错误、端口冲突等,需要给出排查建议,比如检查日志文件,使用netstat查看端口占用情况。 最后,生成相关问题,帮助用户进一步了解相关主题,比如如何验证安装成功,如何配置用户权限,如何处理依赖问题等。</think>### MongoDB离线安装包安装与升级方法 #### 一、离线安装步骤 1. **下载预编译二进制包** - 官网选择对应系统的安装包(如`.tgz`格式),注意CPU架构(x86_64/ARM)和操作系统版本匹配[^3][^4] 2. **解压安装包** ```bash mkdir -p /usr/local/mongodb tar -zxvf mongodb-linux-*.tgz -C /usr/local/mongodb --strip-components 1 # 自动去除一级目录[^1] ``` 3. **配置环境变量** ```bash vi /etc/profile # 添加以下内容 export MONGODB_HOME=/usr/local/mongodb export PATH=$PATH:$MONGODB_HOME/bin source /etc/profile # 立即生效[^4] ``` 4. **创建数据/日志目录** ```bash mkdir -p /data/mongodb/{db,logs} chmod 755 -R /data/mongodb # 确保权限正确 ``` 5. **编写配置文件** ```bash vi $MONGODB_HOME/bin/mongodb.conf ``` 配置文件示例: ```conf dbpath = /data/mongodb/db logpath = /data/mongodb/logs/mongod.log bind_ip = 0.0.0.0 port = 27017 auth = true fork = true # 后台运行[^4] ``` 6. **启动服务** ```bash mongod -f $MONGODB_HOME/bin/mongodb.conf ``` #### 二、离线升级流程 1. **下载新版本安装包** - 保持与旧版相同的架构和系统版本 2. **停止旧服务** ```bash pkill -15 mongod # 安全终止进程 ``` 3. **备份关键数据** ```bash cp -r /data/mongodb/db /backup/mongodb_db_$(date +%F) cp $MONGODB_HOME/bin/mongodb.conf /backup/ ``` 4. **替换二进制文件** ```bash # 解压新版本到临时目录 tar -zxvf mongodb-new-version.tgz -C /tmp/ # 替换旧版文件 cp -rf /tmp/mongodb-new-version/bin/* $MONGODB_HOME/bin/ ``` 5. **启动新服务** ```bash mongod -f $MONGODB_HOME/bin/mongodb.conf ``` 6. **验证升级** ```bash mongo --port 27017 --eval "db.version()" ``` #### 三、常见问题处理 - **依赖缺失**:提前安装`libcurl`,`openssl`等基础库 - **启动失败**:检查日志`tail -f /data/mongodb/logs/mongod.log` - **端口占用**:`netstat -tlnp | grep 27017` #### 四、版本选择建议 - 生产环境推荐使用次新版(如6.0.x) - 跨大版本升级(如4.4→5.0)需参考官方升级文档[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值