MongoDB學習筆記—許可權管理

來源:互聯網
上載者:User

標籤:

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(Administrator 群組,針對整個系統進行管理):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()        因本人是學習筆記,故而部分內容來源於網路,希望能學有所得       關於許可權這塊現在只是簡單的瞭解以及配置,後面如果能夠研究的更深的話還會繼續來說這塊

MongoDB學習筆記—許可權管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.