zoukankan      html  css  js  c++  java
  • mongoDB authentication

    转自:http://blog.csdn.net/allen_jinjie/article/details/9235073


    1. 最开始的时候,我们启动mongodb,但是不包含--auth参数:

    1. E:MongoDBin>mongod --dbpath=E:mongodbdb  
    2. Thu Jul 04 16:31:58.700 [initandlisten] db version v2.4.4  
    3. Thu Jul 04 16:31:58.700 [initandlisten] git version: 4ec1fb96702c9d4c57b1e06dd34eb73a16e407d2  
    4. Thu Jul 04 16:31:58.700 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=0, build=6002, platform=2, servic  
    5. e_pack='Service Pack 2') BOOST_LIB_VERSION=1_49  
    6. Thu Jul 04 16:31:58.700 [initandlisten] allocator: system  
    7. Thu Jul 04 16:31:58.700 [initandlisten] options: { dbpath: "E:mongodbdb" }  
    8. Thu Jul 04 16:31:58.731 [initandlisten]  
    9. Thu Jul 04 16:31:58.731 [initandlisten] ** WARNING: mongod started without --replSet yet 1 documents are present in local.system.r  
    10. eplset  
    11. Thu Jul 04 16:31:58.731 [initandlisten] **          Restart with --replSet unless you are doing maintenance and no other clients a  
    12. re connected.  
    13. Thu Jul 04 16:31:58.731 [initandlisten] **          The TTL collection monitor will not start because of this.  
    14. Thu Jul 04 16:31:58.731 [initandlisten] **          For more info see http://dochub.mongodb.org/core/ttlcollections  
    15. Thu Jul 04 16:31:58.731 [initandlisten]  
    16. Thu Jul 04 16:31:58.981 [initandlisten] waiting for connections on port 27017  
    17. Thu Jul 04 16:31:58.981 [websvr] admin web console waiting for connections on port 28017  


    另开一Dos窗口,直接连接到test数据库上:

    1. E:MongoDBin>mongo  
    2. MongoDB shell version: 2.4.4  
    3. connecting to: test  


    2. 连接到admin数据库,在admin数据库上创建一个用户,这个用户保存在admin.system.users中,它的权限比在其它数据库中设置的用户权限更大。(当admin.system.users中一个用户都没有时,即使mongod启动时添加了--auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作,直到在admin.system.users中添加了一个用户。)

    1. > use admin  
    2. switched to db admin  
    3. > db.system.users.find()  
    4. > db.addUser("allenlei","123456")  
    5. {  
    6.         "user" : "allenlei",  
    7.         "readOnly" : false,  
    8.         "pwd" : "a9eadc99bab4734b32f5bc4148d866c6",  
    9.         "_id" : ObjectId("51d534878704a2ac963ed790")  
    10. }  
    11. > db.system.users.find()  
    12. { "_id" : ObjectId("51d534878704a2ac963ed790"), "user" : "allenlei", "readOnly" : false, "pwd" : "a9eadc99bab4734b32f5bc4148d866c6  
    13. " }  
    14. >  


    3. 现在admin数据库中已经有用户信息了,我们关掉mongodb, 重新启动,这次带有--auth 参数。

    1. E:MongoDBin>mongod --dbpath=E:mongodbdb --auth  
    2. Thu Jul 04 16:44:57.393 [initandlisten] db version v2.4.4  
    3. Thu Jul 04 16:44:57.393 [initandlisten] git version: 4ec1fb96702c9d4c57b1e06dd34eb73a16e407d2  
    4. Thu Jul 04 16:44:57.409 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=0, build=6002, platform=2, servic  
    5. e_pack='Service Pack 2') BOOST_LIB_VERSION=1_49  
    6. Thu Jul 04 16:44:57.409 [initandlisten] allocator: system  
    7. Thu Jul 04 16:44:57.409 [initandlisten] options: { auth: true, dbpath: "E:mongodbdb" }  
    8. Thu Jul 04 16:44:57.440 [initandlisten]  
    9. Thu Jul 04 16:44:57.440 [initandlisten] ** WARNING: mongod started without --replSet yet 1 documents are present in local.system.r  
    10. eplset  
    11. Thu Jul 04 16:44:57.440 [initandlisten] **          Restart with --replSet unless you are doing maintenance and no other clients a  
    12. re connected.  
    13. Thu Jul 04 16:44:57.440 [initandlisten] **          The TTL collection monitor will not start because of this.  
    14. Thu Jul 04 16:44:57.440 [initandlisten] **          For more info see http://dochub.mongodb.org/core/ttlcollections  
    15. Thu Jul 04 16:44:57.440 [initandlisten]  
    16. Thu Jul 04 16:44:57.549 [websvr] admin web console waiting for connections on port 28017  
    17. Thu Jul 04 16:44:57.549 [initandlisten] waiting for connections on port 27017  


    4. 由于指定了-auth参数,那么连接到数据库上就需要提供登录账户,尽管不提供也可以登录到test这个默认数据库,但是没办法操作:

    1. E:MongoDBin>mongo  
    2. MongoDB shell version: 2.4.4  
    3. connecting to: test  
    4. > show collections  
    5. Thu Jul 04 16:53:51.752 JavaScript execution failed: error: {  
    6.         "$err" : "not authorized for query on test.system.namespaces",  
    7.         "code" : 16550  
    8. } at src/mongo/shell/query.js:L128  
    9. >  


    5. 现在我们指定连接到admin数据库,如果账户不对:

    1. E:MongoDBin>mongo --authenticationDatabase admin -u allenlei -p  
    2. MongoDB shell version: 2.4.4  
    3. Enter password:  
    4. connecting to: test  
    5. Thu Jul 04 16:56:55.569 JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.j  
    6. s:L228  
    7. exception: login failed  


    6. 奇怪的是,就算是账户正确,我的机器上也是显示连接到test数据库而不是admin。我需要转到admin数据库上,(root是建立在test数据库上的账户)

    1. E:MongoDBin>mongo --authenticationDatabase admin -u allenlei -p  
    2. MongoDB shell version: 2.4.4  
    3. Enter password:  
    4. connecting to: test  
    5. > db.system.users.find()  
    6. { "_id" : ObjectId("51d3e1c94ef3aba14566b889"), "user" : "root", "readOnly" : false, "pwd" : "b3098ef4591719e9f75972a75883726b" }  
    7. > use admin  
    8. switched to db admin  
    9. > db.system.users.find()  
    10. { "_id" : ObjectId("51d5378a6a7de1fde965535c"), "user" : "allenlei", "readOnly" : false, "pwd" : "a9eadc99bab4734b32f5bc4148d866c6  
    11. " }  
    12. >  
    13. > show collections  
    14. system.indexes  
    15. system.users  
    16. > use tutorial  
    17. switched to db tutorial  
    18. > show collections  
    19. newCollection_noCapped  
    20. numbers  
    21. person  
    22. personalinfo  
    23. photo.chunks  
    24. photo.files  
    25. student  
    26. student_res  
    27. system.indexes  
    28. system.users  
    29. users  
    30. >  


    可以看出,通过admin数据库登入,可以以登录账户进入其他数据库进行操作。

    7. 现在用root账号登入test数据库:

    1. E:MongoDBin>mongo -authenticationDatabase test -u root -p  
    2. MongoDB shell version: 2.4.4  
    3. Enter password:  
    4. connecting to: test  
    5. > show collections  
    6. person  
    7. system.indexes  
    8. system.users  
    9. > db.system.users.find()  
    10. { "_id" : ObjectId("51d53a706ce04d74431706b4"), "user" : "root", "readOnly" : false, "pwd" : "34e5772aa66b703a319641d42a47d696" }  
    11. > use tutorial  
    12. switched to db tutorial  
    13. > show collections  
    14. Thu Jul 04 17:04:51.186 JavaScript execution failed: error: {  
    15.         "$err" : "not authorized for query on tutorial.system.namespaces",  
    16.         "code" : 16550  
    17. } at src/mongo/shell/query.js:L128  
    18. >  

    root账户属于test而不是admin数据库,权限只能在本数据库使用,而不像allenlei可以到tutorial数据库操作。


  • 相关阅读:
    BZOJ2843:极地旅行社(LCT入门题)
    BZOJ2049:Cave 洞穴勘测 (LCT入门)
    【LSGDOJ1383】修改回文 dp
    【NOIP2016】愤怒的小鸟
    【USACO11NOV】牛的阵容Cow Lineup 尺取法+哈希
    【LSGDOJ1836】: 量化交易 贪心
    【网络流24题】魔术球问题 二分答案+最小路径覆盖
    【网络流24题】1745: 餐巾计划问题
    【网络流24题】分配问题 最小最大费用最大流
    【LSGDOJ1834 Tree】树链剖分
  • 原文地址:https://www.cnblogs.com/leonxyzh/p/7289000.html
Copyright © 2011-2022 走看看