MongoDb 本机删除密码的方法
Terminal Inflection
AboutErrors Resolved
Linux
Recommended Books
Who Am I?
There are many occasions where you get locked out of a Mongo DB database. It could be that the admin password is unknown, or that the only admin user that exists is “read-only” (something that Mongo permits you to do). Fortunately, it’s fairly straightforward
to remove the admin database safely and recreate the admin user.
Mongo DB has an idiomatic, not to mention pragmatic approach to user authorization. Access to the database is simplified, and not particular granular, with the idea that access control should be passed more to the connecting application itself. Thus, the default
access control is to have no users at all. You need to create an “admin” user account if you want one. Nothing, however enforces this.
One creates an admin user by creating a user on the “admin” database, after logging in to Mongo:
# mongo localhost
MongoDB shell version: 2.0.2
connecting to: localhost/test
> use admin
switched to db admin
> db.addUser("admin","Password")
And that’s it.
Once this user exists, then every time you login to the database, you need to authenticate, like this:
# mongo localhost
MongoDB shell version: 2.0.2
connecting to: localhost/test
> use admin
switched to db admin
mongo> db.auth("admin","Password")
Failure to authenticate will allow you your connection, but no access to any data. Once again, it’s the fact of the existence of the admin user which enforces access control, as well as the following option in the Mongo DB config file:
auth=true
Solution
This solution will focus on removal of the admin user in a replica set, because it’s slightly more complicated, and slightly more interesting. If you’re just running a single node, the procedure is considerably easier. Just ignore the cluster steps.
Stop all Mongo processes running in the replica set. These will probably be running with the command line or config file option of “replSet”. Check by running “ps” or checking the /etc/mongod.conf file.
When no Mongo replicas are running, perform the following procedure on each node in turn. You’ll need to bring the Mongo process up at one point, but it is vital that only one replica is running at any one time, otherwise the configuration will get resynchronised
from another node, and you don’t want that. You want it changed.
On each node
Change to the mongo directory where the data files reside, possibly /var/lib/mongo but specified in the configuration file by the dbPath parameter.
# cd /var/lib/mongo
Move the admin.* files somewhere else to back them up.
# mv /admin.* /tmp
It’s the simple. Deleting these datafiles will have removed the admin credentials from the database.
Start the mongo replica daemon on this single node. Depending on your distribution and how it’s configured, it’s probably something like this:
# /etc/init.d/mongod start
# mongo localhost
MongoDB shell version: 2.0.2
connecting to: localhost/test
> use admin
switched to db admin
> db.addUser("admin","password")
At this point, the admin datafiles should have been recreated. Check that the credentials work:
> db.auth("admin","password")
1
If this returns the numeral “1″, then the login is successful. However, if this is a cluster, the node you’re on may have been marked as stale. To check and fix:
> db.system.users.find()
error: { "$err" : "not master and slaveok=false", "code" : 13435 }
> rs.slaveOk()
not master and slaveok=false
The rs.slaveOk() command will allow you to query normally from the secondary:
SECONDARY> db.system.users.find()
{ "_id" : ObjectId("4fc4972525a7b704e9a3a09e"), "user" : "admin", "readOnly" : false, "pwd" : "2f1bffb1d28a2cca21679103652b1040" }
Now stop mongo, and repeat the above procedure on the other nodes:
# /etc/init.d/mongod stop
When you have updated the admin password on all mongod replicas, restart all nodes in the replica set.
Now, you should find that all nodes have admin user accounts, and that you can use these to authenticate against each one.
Parsons is a freelance Linux specialist who has designed, built and supported Unix and Linux systems in the finance, telecommunications and media industries.
He lives and works in London.
Posted
by Matt
Parsons at 10:44 am Tagged
with: mongo
One Response to “Mongo DB: forcing removal of the admin user”
- sarat says:
Thank you so much. This was very helpful.
Leave a Reply
Name
URI
Your Comment
You may use these HTML tags and attributes: <a
href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Notify
me of follow-up comments by email.
Notify
me of new posts by email.
| Mongo DB Backups with AMANDA |
Recent Posts
- Extract
all sender email addresses from a mailbox with Python - Intercepting
the STDIN and STDOUT of a process with strace - Bash:
having the last word - Directory
tree diff with filename exclusions - Parse
a shell config file in Perl - Mongo
DB Backups with AMANDA - Visualizing
Puppet dependencies - Remove
duplicate lines in a file without sorting
Categories
Technical Notebook
Blogroll
Make a donation
Buy me a beer?
Recommended Reading

Archives
Follow

连接:
http://terminalinflection.com/mongo-db-force-admin-removal/
MongoDb 本机删除密码的方法的更多相关文章
- TypeError: db.addUser is not a function : @(shell):1:1 ——mongoDB创建新用户名密码的方法
不多说,旧版本使用 db.addUser("root","root") 新版本使用这句会出现这个错误提示 TypeError: db.addUser is no ...
- 查看本机的IP地址方法:
查看本机的IP地址方法:对于XP系统:方法一:如果右下角系统托盘区有本地连接的小电脑,双击小电脑→支持,就可以看到本机IP地址.无线连接也是一样.方法二:开始→运行cmd /k ipconfig,IP ...
- (转)mysql账号权限密码设置方法
原文:http://www.greensoftcode.net/techntxt/2013410134247568042483 mysql账号权限密码设置方法 我的mysql安装在c:\mysql 一 ...
- mysql忘记root密码拯救方法(flush privileges)
修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...
- Live帐号登陆win8系统不用输密码的方法
win 8 系统旨在让大家日常的操作更加方便与快捷.因此,今天,小编将与大家分享的是如何利用Live帐号登陆win8系统,而不用输密码的方法.具体的步骤如下文所述. 按win+R打开运行输入cmd(在 ...
- VirtualBox虚拟机下Windows登录密码破解方法(阿里云推荐码:1WFZ0V,立享9折!)
VirtualBox虚拟机下Windows登录密码破解方法 近两年虚拟机的发展给开发人员带来了极大便利,安装一个新环境,只需从别人那里copy一份虚拟机文件即可,分分钟搞定.我之前一直在Ubuntu下 ...
- kafka删除topic的方法及我在kafka上边的一些经验
我在本地做kafka的producer调试,每隔一段时间后,所使用的topic管道就会堆积数据,而且我这边使用的是 kafka bin 下的consumer命令单独消费的,每次都是 --fro ...
- dedecms后台添加新变量和删除变量的方法
下面由做网站为大家来介绍dedecms后台添加新变量和删除变量的方法 添加新变量是做什么用的?答:可以在模板内调用的东东. 一.进入网站织梦(Dedecms)后台(以dede5.5为例),依次打开系统 ...
- SQLServer2008修改sa密码的方法与SQL server 2008数据库的备份与还原
sa密码的修改转载自:http://blog.csdn.net/templar1000/article/details/20211191 SQL server 2008数据库的备份与还原转自 :htt ...
随机推荐
- redux 及 相关插件 项目实战
目录结构 +-- app | +-- actions | +-- index.js | +-- components | +-- content.js | +-- footer.js | +-- se ...
- 将世界坐标转成NGUI坐标
将世界坐标转成NGUI坐标,这个中间须要一个屏幕坐标,可參考例如以下代码: /// <summary> /// 将世界坐标转成UI坐标 /// </summary> /// & ...
- saltstack安装配置(master&minion)
操作系统centos6.3,centos6.4,windows server2008R2,windows7. 文中的下载链接可能会随着saltstack官网上版本的更新,而出现变动或错误,请以你需要安 ...
- setUp() and setUpBeforeClass()
The @BeforeClass and @AfterClass annotated methods will be run exactly once during your test run - a ...
- H5新增表单属性
一.form属性 <form id="test"> <input type="text" placeholder="请输入合适的信息 ...
- VC最小化到托盘程序
在实际操作电脑的过程中,我们常常可以看到一些应用程序可以最小化到桌面右下角的托盘中显示,如一些杀毒软件等开机就显示在托盘中,或是我们常用的QQ等聊天工具,都可以最小化在托盘中,如图-1. 在图-1中, ...
- using the flume-ng-sql-source plugin to push data from Mysql DB to Spark
org.apache.flume.EventDeliveryException while running flume and sending data to spark · Issue #21 · ...
- A toolbox to build your own build server
A toolbox to build your own build server LambdaCD - Build Pipelines as Code https://www.lambda.cd/ A ...
- android支付
这里不讲具体的某个平台的支付使用,在工作中,公司使用到了ping++支付,使用它的好处是可以不用关心某个平台的支付了,例如:微信支付.支付宝支付等,太多的平台有个整合,是一个很好的事情,当然这也减轻了 ...
- 使用std::mutex取代QMutex
为了保证对某个资源的操作是原子性的(对资源读写时,只有当前的操作结束,才允许另外线程对其操作,这里有个理解误区,资源操作原子性不是说,当前某个线程获得了某个资源使用权,然后线程执行时间完毕,要切换线程 ...