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()
    
    因本人是學習筆記,故而部分內容來源於網絡,希望能學有所得
       關於權限這塊現在只是簡單的了解以及配置,后面如果能夠研究的更深的話還會繼續來說這塊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM