MongoDB shell脚本 自动添加权限与账号密码

MongoDB权限设置:自动添加账号与密码脚本
本文介绍了如何使用MongoDB shell脚本来为数据库添加账号密码,并实现兼容旧环境的自动权限判断。在实现过程中,通过分析和脚本示例,解释了开启权限认证的方法以及在shell中执行JS代码时遇到的问题和解决方案。

需求

将无需账号密码访问的MongoDB数据库,添加上账号密码,并且适配兼容旧的无权限访问的环境,即自动判断有无权限,无则自动加上。

分析

MongoDB开启权限访问需要两步:

  1. 为数据库添加账号密码,即添加用户,默认是无用户的。
  2. 将mongod服务开启时,加上auth参数,即开启权限认证。(或者修改MongoDB的mongod.conf配置文件,将#auth = true的注释去掉即可)

实现

话不多说,直接看脚本:
fit_mongo.sh

#!bin/bash

#以无权限控制的方式启动服务(--fork -f并不是必须的,是我自己的需求在用,有需要自行查询其他参数,)
mongod --fork -f /path/to/mongod.conf

#使用mongo [options] [db address] [file names (ending in .js)]命令执行js脚本操作数据库,并写入日志
mongo --host 127.0.0.1:27017 testdb fit_mongo.js >> fit_mongo.log

#安全地杀掉mongod进程
pkill mongod

#开启权限控制
mongo --aut
### 如何在MongoDB中配置和管理用户权限 #### 创建具有特定权限的用户 为了创建一个具备广泛权限的数据库管理员,在 MongoDB shell 中可以切换至 `admin` 数据库并调用 `createUser` 方法来添加拥有 `readWriteAnyDatabase`, `dbAdminAnyDatabase` 和 `clusterAdmin` 角色的用户[^2]。 ```javascript use admin; db.createUser({ user: "superAdmin", pwd: "password123", // 应替换为更安全的密码 roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] }); ``` 此段代码会建立名为 `superAdmin` 的超级管理员账号,赋予其对整个系统的全面控制权。请注意实际应用时应采用更强的安全措施保护账户凭证。 #### 定义自定义角色分配权限 除了内置的角色外,还可以通过 `createRole` 函数定制化新角色,并指定具体的操作权限范围: ```javascript use mydatabase; // 替换成目标数据库名称 db.createRole({ role: "customReader", privileges: [{ resource: { db: "mydatabase", collection: "" }, actions: ["find"] }], roles: [] }); // 给已有用户授予新建的角色 db.grantRolesToUser( "existingUsername", [{role:"customReader", db:"mydatabase"}] ); ``` 上述脚本展示了怎样构建仅允许读取数据而不做修改的新角色 `customReader` 并将其指派给现有用户。 #### 修改现有用户的权限 如果需要调整已存在用户的权限,则可以通过更新他们的角色列表实现这一点: ```javascript use admin; db.updateUser("usernameToUpdate",{ roles:[ {"role":"newRoleName","db":"targetDb"} ] }) ``` 这段命令用于更改用户名为 `"usernameToUpdate"` 用户所持有的角色集合,从而改变其所拥有的权限级别。 #### 查看当前用户及其权限详情 最后,若想了解某个特定用户被授予权限的情况,可执行如下查询语句获取相关信息: ```javascript use admin; printjson(db.system.users.findOne({user : 'specificUserName'})); ``` 这将返回有关 `'specificUserName'` 这一用户的全部记录,包括关联的角色和其他属性信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值