MongoDB-保护整个数据库免受.remove()攻击?

MongoDB-保护整个数据库免受.remove()攻击?,mongodb,database,Mongodb,Database,我正在使用MongoDB作为我的数据库,作为第一次的后端开发人员,我很难删除整个数据库/集合 只需键入db.collection.remove()即可从该集合中删除所有记录 我知道一个有效的备份策略应该不会带来任何问题,但我偶尔会在某些集合上运行.remove(),我不想意外输入错误的集合名称,(a)必须进行备份还原,(b)丢失在备份和还原之间收集的所有数据,尤其是我的应用程序收集了大量用户数据 是否有任何“保护措施”可供我设置数据库使用,即使只是警告/确认 “哟,你确定要从中删除所有内容吗?选

我正在使用
MongoDB
作为我的数据库,作为第一次的后端开发人员,我很难删除整个数据库/集合

只需键入
db.collection.remove()
即可从该集合中删除所有记录

我知道一个有效的备份策略应该不会带来任何问题,但我偶尔会在某些集合上运行
.remove()
,我不想意外输入错误的集合名称,(a)必须进行备份还原,(b)丢失在备份和还原之间收集的所有数据,尤其是我的应用程序收集了大量用户数据

是否有任何“保护措施”可供我设置数据库使用,即使只是警告/确认


“哟,你确定要从中删除所有内容吗?
选择:
是/否”
当前版本中无法提供此功能


在将来的版本中,当用户定义的角色可用时,您可以定义一个允许插入()和更新()但不允许删除()或删除()等的角色,从而使自己以不同的高级角色用户身份登录,但在当前(2.4)版本中不可用。

用户角色无法解决您的问题。如果您的帐户具有删除一个用户的权限,您可能会意外地将其全部删除。如果您的帐户有权更新一个用户的属性,您可能会意外地更新所有用户

不过,有一个简单的解决方法

步骤0:备份数据库。并定期测试备份。并确保在备份未运行或出错时收到警报。副本集不是备份。我知道这很明显,但是

步骤1:为数据库编写GUI界面。这只需要一两天,而且应该足够简单,秘书或实习生可以使用它而不用担心你的数据。(如果你认为这需要很长时间,那就找一个有更多细节的框架。你的管理控制台甚至不需要用与你的应用程序相同的语言编写。)

第2步:数据迁移(数据库的维护转换)应始终从签入源代码管理的脚本运行,并事先在非prod上进行测试。脚本可以像
mongo-e“foo.update(blah)”
一样简单,但您应该将其作为脚本运行,以避免剪切粘贴错误。理想情况下,您甚至会有一个所有迁移的清单。(检查您是否有最近的备份。事先检查数据库日志和系统负载。编写一个前后查询,告诉您迁移是否成功…)

步骤3:您现在不再需要使用生产Mongo控制台。所以不要。这是一个有用的开发工具,但这只在本地开发数据库上需要

上述角色对于只读查询可能很有用。但您已经可以针对非主副本集成员执行此操作


tl;dr:你可以使用它走得很远,但最终你会发现,自动化一切更好(而且不会有更多的工作)。

哦,他们计划在中构建该功能真是太棒了!在这一点上是否有时间表或只是一个“可能”?我肯定我不是唯一一个对这个功能感到害怕的人!它被安排在下一个主要版本中