MongoDB學習筆記—權限管理

1.MongoDB權限介紹

  a 上篇文章中,咱們在Linux下配置了MongoDB環境而且將其設置爲服務隨機器啓動而啓動,那麼接下來這篇文章咱們就來簡單說一下MongoDB下對登陸用戶權限的管理。
  b  MongoDB安裝完成後,默認是不須要輸入用戶名密碼便可登陸的,可是每每數據庫方面咱們會出於安全性的考慮而設置用戶名密碼,本篇文章主要介紹了MongoDB添加管理員/普通用戶的方法。
  c 在咱們使用的關係型數據庫中,通常都是含有權限控制的,也就是說配置什麼用戶訪問什麼數據庫,什麼數據表,什麼用戶能夠對錶進行增刪改,什麼用戶能夠對錶進行讀取等等都是能夠配置,那麼MongoDB做爲一個非關係型數據庫的典型,它其實也是能夠配置的,而掌握MongoDB的權限咱們只須要簡單理解下面幾點,後面按照下面的幾點去配置便可(網上學習所獲得的總結)。
    c.1 MongoDB是沒有默認管理員帳號的,因此要先添加管理員帳號,在開啓權限認證。
    c.2 切換到admin數據庫,添加的帳號纔是管理員的帳號。
    c.3 用戶只能在用戶所在的數據庫登陸,包括管理員帳號。
    c.4 管理員能夠管理全部的數據庫,可是不能直接管理其它數據庫,要先在admin數據庫中認證才能夠,也是爲了 安全性考慮。
  d 本學習筆記在linux下安裝的MongoDB的版本是3.2.8,因此下面操做的命令都是以3.2.8版本爲例,這是由於老版本和新版本的命令有所不一樣,請大夥周知,若是你們用的版本比較低,請自行查看命令是什麼進行測試操做。

2 MongoDB添加管理員帳戶

  a 上面簡單的說明以後,下面咱們須要開始鏈接數據庫進入CLI管理界面,只有進入此頁面以後咱們纔可以對其進行操做(暫時爲用客戶端,後面會用客戶端來進行說明)。
    a.1 首先跳轉到MongoDB安裝包下的bin文件夾下,而後使用命令(./mongo)啓動,則會啓動成功(確保MongoDB的服務已啓動),如圖所示(MongDB的安裝路勁爲本身的安裝路徑,可能會和個人不一致,請檢查):
      
    a.2 如圖所示,則鏈接成功,咱們便可在>後面進行操做。
  b 鏈接數據庫而且切換到用戶表下
    b.1 鏈接成功以後首先咱們輸入命令:show dbs,咱們發現其系統中內置了一個數據庫名字爲local(若是你們查詢出來還有一個 admin數據庫,那是由於你使用的是低版本的MongoDB),admin庫是不存在的,須要咱們本身建立。
    b.2 (use admin) 使用此命令建立一個admin數據庫,權限管理就要使用admin數據庫,此命令也是切換數據庫的命令。
    b.3 (show collections) 切換到admin庫以後,使用show collections查詢,咱們發現該數據庫下包含了一個system.user和system.version表,咱們主要來看system.user表,這張表是用來存放超級管理員的。
    b.4 (db.system.users.find())首先使用命令查詢system.user表中含有數據否,輸入命令:db.system.users.find(),查詢發現數據庫是空的,這時候咱們給這個表添加一個管理員帳戶。
  d 添加用戶而且爲用戶指定角色和數據庫,命令如圖所示:
    
    d.1 user:用戶名
    d.2 pwd:密碼
    d.3 customData:描述字段
    d.4 roles:指定用戶的角色,能夠用一個空數組給新用戶設置空角色,在roles字段能夠指定內置角色和用戶定義的角色,內置角色在在第四個模塊咱們專門回來講它。
  e (show users、db.system.users.find())當建立完用戶以後,咱們能夠用前面的兩個命令來查詢用戶的信息,自行查詢眼看。
  f  當添加完用戶信息以後,咱們的想法就是立刻從新鏈接驗證是否權限已經控制,這裏就打擊你了,固然尚未控制,這裏咱們還須要開啓用戶權限驗證,由於MongoDB默認是不開啓權限驗證的,下面咱們簡單說一下如何開啓權限驗證。

MongoDB開啓用戶權限驗證

  a 經過上面的簡單介紹咱們已經配置了用戶和密碼以及角色,可是正如上面最後一步我所說,這裏登陸仍是登陸不了,那麼是由於咱們沒有開啓用戶權限驗證,如何開啓這個權限驗證呢。
  b 首先咱們打開上一篇咱們配置的mongodb.conf配置文件,個人安裝路徑是:(/usr/local/kencery/mongoDB/mongodb/bin/),使用vim打開,找到這樣一個屬性(auth=true),將前面的註釋去掉,保存。
  c 重啓MongoDB服務,由於我在前面已經將MongoDB設置爲服務,因此我使用下面的命令便可對MongoDB進行關閉和重啓
    c.1 service mongod stop
    c.2 service mongod start
  d 重啓以後咱們在鏈接數據庫而後切換到admin數據庫下,使用db.system.users.find()命令查看,以下圖所示,則說明配置已經成功
    
  e 如上圖所示,提示信息提示咱們沒有對其進行受權,此時,咱們輸入以下命令進行受權,受權以後咱們使用查詢命令去查詢發現已經能夠查詢,到這裏簡單權限已經設置完成。
    e.1 db.auth("kencery","kencery")  

MongoDB的roles角色簡單介紹

  a MongoDB內置角色官網文檔介紹:http://docs.mongoing.com/manual-zh/reference/built-in-roles.html
  b 關於MongoDB的內置角色,咱們大概能夠分爲如下幾種來簡單說一下
    b.1 Database User Roles(數據庫用戶角色):read、readWrite
    b.2 Database Administration Roles(數據庫管理角色):dbAdmin、dbOwner、userAdmin
    b.3 Culster Administration Roles(管理員組,針對整個系統進行管理):clusterAdmin、clusterManager、clusterMonitor、hostManager
    b.4 Backup and Restoration Roles(備份還原角色組):backup、restore
    b.5 All-Database Roles(全部數據庫角色):readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    b.6 Superuser Roles(超級管理員):root、(dbOwner、userAdmin、userAdminAnyDatabase這幾個角色角色提供了任何數據任何用戶的任何權限的能力,擁有這個角色的用戶能夠在任何數據庫上定義它們本身的權限)
    b.7  Internal Role(內部角色,通常狀況下不建議設置):__system
  c 關於上面每個角色的意義是什麼,請自行去官網或者這篇文章去查看,地址是:http://www.cnblogs.com/SamOk/p/5162767.html
  d 我暫時只是理解了一些,還不能所有理解,由於畢竟只是本身學習,因此只是本身作實踐測試了一些角色的意義,若是你們對那個不太懂,能夠留言咱們一塊探討。

MongoDB下建立一個新的數據庫而且配置讀寫(read、readWrite)權限管理的案例說明

  a 在上面咱們在admin數據庫下爲kencery用戶創建了一個userAdminAnyDatabase角色,使用這個用戶來管理用戶,能夠經過這個角色來建立、刪除角色。首先咱們切換到admin下受權用戶登陸(從新鏈接以後的操做),命令以下:
    a.1 use admin
    a.2 db.auth("kencery","kencery")  返回1則表示受權成功,不然受權失敗
    a.3 show dbs  驗證受權是否成功。
  b 受權成功以後,首先咱們建立一個日誌表(logs),給logs表建立一個read和readwrtite帳號。read的帳號對應制度帳號,readwrite帳號對應讀寫帳號,命令以下:
    b.1 use logs
    b.2 db.createUser({
                  user:"read",                                   
                  pwd:"read",
                  roles:[{role:"read",db:"logs"}]
             })
    b.3 添加讀寫用戶,將上面的命令中的user和pwd改成:readwrite,roles中的role改成readWrite,其它的不用改執行便可。
    b.4 最後查詢咱們添加的用戶以下所示,則說明咱們對其讀和讀寫用戶添加完成。
       
  c 上面咱們建立了兩個帳號以後,首先咱們來驗證讀寫帳號(readwrite(能夠寫入當前數據庫的用戶信息)),
    c.1 首先咱們不要切換用戶,直接在kencery用戶下面對logs數據庫下的payment表進行插入,會提示咱們插入失敗,沒有權限,這是由於userAdminAnyDatabase權限只是針對用戶管理的,對其它的表示沒有操做權限的,以下如所示:
      
    c.2 從上面看到提示咱們權受權失敗,這時候用咱們建立的readwriter(讀寫)帳號受權,而後在進行插入和查詢,則發現插入以及查詢均成功,如圖所示:
      
    c.3 從上面咱們看到對於讀寫權限驗證沒有問題。
  d 上面測試了讀寫權限,下面咱們測試一下讀權限(read)
    d.1 繼續上面的操做,首先咱們受權給read用戶,而後使用read用戶去插入和查詢,則發現插入提示沒有受權,而查詢成功,則咱們指望的所實現,如圖所示:
      
    d.2 如上圖所示,則說明受權已經完成,徹底能夠配置給某些用戶只能去讀而不能插入修改的權限。

MongoDB超級管理員root

  a 上面咱們簡單介紹了讀寫權限以及讀權限,那麼下來咱們說一下root權限,它是超級權限,也就是說你只要配置其帳號,則能夠對數據進行任何的操做,固然正常環境中不建議使用,危險性極高!可是爲了學習,咱們仍是來說述一下這個角色的使用,
  b  首先在上面的環境中咱們繼續受權給kencery用戶,而後建立一個超級用戶nouse(不建議使用)。可是當咱們受權的時候發現報錯了,報錯截圖:
    
        備註:緣由是咱們在admin數據庫下面建立的用戶,不能直接在其它庫下面受權,只能在帳號建立庫下面受權,而後在去其餘庫訪問。
  c 從上面獲得,首先咱們切換數據庫到admin,而後建立用戶nouse,權限角色給root,數據庫對應admin,腳本在上面都已經寫過,這裏就再也不累贅了。
  d 完成以後,咱們切換受權給用nouse以後,切換到logs數據庫下面進行各類操做,發現都是能夠操做的,簡單截圖以下:
    
  e 由於帳號始終都是在當前需呀受權的數據庫下面進行受權的,那要不是在當前數據庫下面受權呢,意思就是,我如今切換到admin數據庫下添加用戶給logs數據庫,建立完成以後如何操做呢?始終記下來上面所述的那句:(哪裏建立哪裏認證)在admin數據庫下面建立的用戶,不能直接在其它庫下面受權,只能在帳號建立庫下面受權,而後在去其餘庫訪問。
  f 從文章開始到如今咱們已經建立了不少帳戶,那麼咱們可使用下面兩條命令來查詢帳戶以及帳戶總數
    f.1 db.system.users.find().pretty()
    f.2 db.system.users.find().count()
    
    因本人是學習筆記,故而部份內容來源於網絡,但願能學有所得
       關於權限這塊如今只是簡單的瞭解以及配置,後面若是可以研究的更深的話還會繼續來講這塊
相關文章
相關標籤/搜索