我正在使用MongoDB
作为我的数据库,作为首次使用后端的开发人员,我可以轻松删除整个数据库/集合,这让我很烦恼。
只需输入db.collection.remove()
即可删除该集合中的所有记录!
我知道一个有效的备份策略应该会导致这个问题没有问题,但我偶尔做在某些集合上运行.remove()
,我不想输入错误的集合意外命名和(a)必须进行备份恢复,以及(b)丢失我在备份和恢复之间收集的任何数据,尤其是当我的应用程序收集大量用户数据时。
是否有任何'保护'我可以设置我的数据库使用,即使它只是一个警告/确认说
"Yo, are you sure you want to remove everything from <collectionname>?
选择:Yes/No"
答案 0 :(得分:3)
用户角色无法解决您的问题。如果您的帐户有权删除一个用户,则可能会意外删除所有用户。如果您的帐户有权更新一个用户的属性,则可能会意外更新所有用户。
然而,有一个简单的解决办法。
第0步:备份数据库。并定期测试备份。如果备份没有运行或出错,请确保收到警报。副本集不是备份。我知道这很明显,但是evidentally it's not obvious to everybody.
第1步:为您的数据库编写web admin GUI界面。这只需要一两天 - 而且应该很简单,秘书或实习生可以使用它而不用担心你的数据。 (如果您认为这需要很长时间,请找一个更多花俏的框架。您的管理控制台甚至不需要使用与您的应用程序相同的语言编写。)
第2步:数据迁移(数据库的维护转换)应始终从检查到源代码管理的脚本运行,并事先在非prod上进行测试。该脚本可以像mongo -e "foo.update(blah)"
一样简单,但您应该将其作为脚本运行,以避免出现剪切错误。理想情况下,您甚至可以获得所有迁移的清单。 (检查您是否有最近的备份。请事先检查数据库日志和系统负载。编写一个前后查询,告诉您迁移是否成功...)
第3步:您现在不再需要使用生产的Mongo控制台。所以不要。它是一个有用的开发工具,但只在本地开发数据库上才需要。
上述角色可能对只读查询很有用。但是您已经可以对非主副本集成员执行此操作。
tl; dr:你可以使用cowboy admin techniques走得很远,但最终你会发现它更好(而且工作量不多) )使一切自动化。
答案 1 :(得分:1)
在当前版本中您无法提供此功能。
在用户定义角色可用的未来版本中,您可以定义一个允许insert()和update()但不能删除()或drop()等的角色,因此可以让自己以不同的更高版本登录角色用户,但在当前(2.4)版本中不可用。