【Mongo】mongodb的使用者認證

小亮520cl發表於2018-05-29

1.建立超級賬號

  1. > use admin ;
  2. > db . createUser ( { user : "admin" , pwd : "123456" , roles : [ { role : "root" , db : "admin" } ] } )
  3. Successfully added user : {
  4.          "user" : "admin" ,
  5.          "roles" : [
  6.                 {
  7.                          "role" : "root" ,
  8.                          "db" : "admin"
  9.                 }
  10.          ]
  11. }

user:使用者名稱

pwd:密碼

roles :指定使用者的角色,可以用一個空陣列給新使用者設定空角色;在roles欄位,可以指定內建角色和使用者定義的角色。 可以選:

  1. Built - In Roles(內建角色):
  2.     1 . 資料庫使用者角色:read、readWrite ;
  3.     2 . 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
  4.     3 . 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  5.     4 . 備份恢復角色:backup、restore;
  6.     5 . 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  7.     6 . 超級使用者角色:root
  8.     // 這裡還有幾個角色間接或直接提供了系統超級使用者的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
  9.     7 . 內部角色:__system

具體角色:
  1. Read:允許使用者讀取指定資料庫
  2. readWrite:允許使用者讀寫指定資料庫
  3. dbAdmin:允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system . profile
  4. userAdmin:允許使用者向system . users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者
  5. clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
  6. readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
  7. readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
  8. userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
  9. dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
  10. root:只在admin資料庫中可用。超級賬號,超級許可權




2.開啟許可權認證

  1. 配置檔案新增
  2. [ dbaadmin@ ip - 172 - 31 - 36 - 77 ~ ] $ more /usr/ local / mongodb/conf/mongod . conf
  3. auth = true


3.重啟後認證超級賬號

  1. [ root@iZ2ze66bhrbxkc31nljgjnZ mongodb ] # /usr/ local / mongodb/bin/mongo
  2. MongoDB shell version : 3 . . 6
  3. connecting to : test
  4. > show dbs ;    --沒許可權檢視
  5. 2018 - 05 - 07T14 : 29 : 25 . 847 + 0800 E QUERY    Error : listDatabases failed : {
  6.          "ok" : 0 ,
  7.          "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }" ,
  8.          "code" : 13
  9. }
  10.     at Error ( < anonymous > )
  11.     at Mongo . getDBs ( src/mongo/shell/mongo . js : 47 : 15 )
  12.     at shellHelper . show ( src/mongo/shell/utils . js : 630 : 33 )
  13.     at shellHelper ( src/mongo/shell/utils . js : 524 : 36 )
  14.     at ( shellhelp2 ) : 1 : 1 at src/mongo/shell/mongo . js : 47
  15. > use admin ;
  16. switched to db admin
  17. > db . auth ( 'admin' , '123456' ) ; -admin下認證超級賬號, 資料庫帳號是跟著資料庫來走的,哪裡建立哪裡認證。
  18. 1
  19. > show dbs ;
  20. admin   0 . 078GB
  21. local 0 . 078GB
  22. rundb   0 . 078GB
  23. rundb2  0 . 078GB




4.新增普通賬號

  1. > use rundb2 ;
  2. switched to db rundb2
  3. > db . createUser ( { user : 'runuser2' , pwd : '123456' , roles : [ { role : "dbOwner" , db : " rundb2 " } ] } )
  4. Successfully added user : {
  5.          "user" : "runuser2" ,
  6.          "roles" : [
  7.                 {
  8.                          "role" : "dbOwner" ,
  9.                          "db" : "rundb2"
  10.                 }
  11.          ]
  12. }
  13. > show users ;   <1pre style="margin-top:0px;margin-bottom:0px;white-space:pre-wrap;text-align:justify;font-family:;" "=""> #檢視當前庫下的使用者
  14. {
  15.          "_id" : "rundb2.runuser" ,
  16.          "user" : "runuser" ,
  17.          "db" : "rundb2" ,
  18.          "roles" : [
  19.                 {
  20.                          "role" : "readWrite" ,
  21.                          "db" : "rundb2"
  22.                 }
  23.          ]
  24. }
  25. {
  26.          "_id" : "rundb2.runuser2" ,
  27.          "user" : "runuser2" ,
  28.          "db" : "rundb2" ,
  29.          "roles" : [
  30.                 {
  31.                          "role" : "dbOwner" ,
  32.                          "db" : "rundb2"
  33.                 }
  34.          ]
  35. }



5.普通賬號認證

  1. 認證方式一
  2. [ root@iZ2ze66bhrbxkc31nljgjnZ mongodb ] # /usr/ local / mongodb/bin/mongo - u runuser - p 123456  rundb2
  3. MongoDB shell version : 3 . . 6
  4. connecting to : rundb2
  5. > show collections ;
  6. system . indexes
  7. testcoll
  8. testcoll2

 

  認證方式二
  1. [ root@iZ2ze66bhrbxkc31nljgjnZ mongodb ] # /usr/ local / mongodb/bin/mongo
  2. MongoDB shell version : 3 . . 6
  3. connecting to : test
  4. > use rundb2 ;
  5. switched to db rundb2
  6. > show dbs ;
  7. 2018 - 05 - 07T14 : 36 : 46 . 809 + 0800 E QUERY    Error : listDatabases failed : {
  8.          "ok" : 0 ,
  9.          "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }" ,
  10.          "code" : 13
  11. }
  12.     at Error ( < anonymous > )
  13.     at Mongo . getDBs ( src/mongo/shell/mongo . js : 47 : 15 )
  14.     at shellHelper . show ( src/mongo/shell/utils . js : 630 : 33 )
  15.     at shellHelper ( src/mongo/shell/utils . js : 524 : 36 )
  16.     at ( shellhelp2 ) : 1 : 1 at src/mongo/shell/mongo . js : 47

  17. > db . auth ( 'runuser2' , '123456' )
  18. 1
  19. > show collections ;
  20. system . indexes
  21. testcoll
  22. testcoll2

5賬號管理

  1. 修改密碼
  2. MongoDB 修改帳號的密碼有兩種方式: 1 . 使用 changeUserPassword 方法 2 . 使用 updateUser 方法裡面的 pwd 引數
  3. / / 驗證帳號密碼
  4. > db . auth ( "biadmin" , "biadmin" )
  5. 1
  6. //修改帳號密碼
  7. > db . changeUserPassword ( "biadmin" , "123" )
  8. //使用原密碼驗證失敗返回0
  9. > db . auth ( "biadmin" , "biadmin" )
  10. Error : Authentication failed .
  11. 0
  12. //使用修改後密碼驗證成功返回1
  13. > db . auth ( "biadmin" , "123" )
  14. 1
  15. //使用updateUser 修改密碼
  16. > db . updateUser (
  17.   "biadmin" ,
  18.   {pwd : "biadmin" } )
  19. //驗證密碼成功返回1
  20. > db . auth ( "biadmin" , "biadmin" )
  21. 1

  22. 刪除帳號
  23. MongoDB 刪除帳號有兩種方式: 
  24. 1 . 使用 dropUser ( "username" ) 刪除當前資料庫下指定帳號 
  25. 2 . 使用 dropAllUsers ( ) 刪除資料庫下所有帳號
  26. / / 已經建立兩個測試帳號
  27. > db . getUser ( "test1" )
  28. {
  29.          "_id" : "bitest.test1" ,
  30.          "user" : "test1" ,
  31.          "db" : "bitest" ,
  32.          "roles" : [
  33.                 {
  34.                          "role" : "dbAdmin" ,
  35.                          "db" : "bitest"
  36.                 }
  37.          ]
  38. }
  39. > db . getUser ( "test2" )
  40. {
  41.          "_id" : "bitest.test2" ,
  42.          "user" : "test2" ,
  43.          "db" : "bitest" ,
  44.          "roles" : [
  45.                 {
  46.                          "role" : "dbAdmin" ,
  47.                          "db" : "bitest"
  48.                 }
  49.          ]
  50. }
  51. //使用dropUser刪除帳號test1成功返回true
  52. > db . dropUser ( "test1" )
  53. true
  54. //查詢帳號test1已不存在
  55. > db . getUser ( "test1" )
  56. null
  57. //使用dropAllUsers刪除所有帳號
  58. > db . dropAllUsers ( )
  59. 2
  60. //查詢帳號 test2,biadmin 都已不存在
  61. > db . getUser ( "test2" )
  62. null
  63. > db . getUser ( "biadmin" )
  64. null
  65. //查詢資料庫下所有帳號返回空陣列
  66. > db . getUsers ( )
  67. [ ]





6 更改使用者資訊

更改role,密碼都行
db.updateUser(
    "test",{
        roles:[ { role: "readWrite", db: "welike_mongo" } ],
        pwd:"123456"
    }
)

更多的操作檢視參照文件:
https://www.cnblogs.com/shiyiwen/p/5552750.html

https://www.cnblogs.com/damingge/p/6507605.html



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2155305/,如需轉載,請註明出處,否則將追究法律責任。

相關文章