MongoDB許可權,mongodb使用權限設定

來源:互聯網
上載者:User

MongoDB許可權,mongodb使用權限設定

MongoDB啟動預設是不設定許可權的,這一點和mysql,oracle有本質的區別。

當啟動的時候增加參數 --auth才會啟動許可權,mongoDB最大的特點是面向資料庫的許可權,除了超級管理員,其他使用者的許可權都是與資料庫一一對應的。

問題1:如何增加使用者:

使用db.addUser('name','password')語句建立使用者。

MongoDB使用者也分為普通使用者和超級管理使用者,普通使用者對應的是當前表的許可權,超級管理使用者對應的許可權是整個Mongodb的許可權。普通使用者只能在屬於自己的資料表空間進行操作,不能建立其他資料庫以及查詢其他資料的資料,如果需要建立資料庫只能使用超級管理員登入。

建立使用者方式
a.在不設定許可權的登入模式建立使用者,在admin庫下建立的使用者是超級管理員在其他庫建立的使用者只有當前庫的許可權,沒有其他庫的許可權。

b.登入的普通使用者可以在當前庫下建立使用者,登入的超級使用者可以在任何庫下建立任何使用者。

問題2:如何登入

使用db.auth('name'password')可以登入當前的資料庫。

mongoDB預設串連登入的資料庫是test,如果登入test庫下的使用者,只能查看Test庫下的資料。如果登入庫User下的使用者,只能查看User下的資料。

當需要查看所有庫的資料,以及使用show dbs這類全域的資料需要使用超級管理員,如何登入超級管理員呢?

超級管理員也有預設的資料庫,這個資料庫是admin,切換資料庫到admin,然後使用db.auth登入超級管理員,登入好之後,就可以進入任意庫CRUD以及使用show dbs操作了。

當你登入了A庫,在登入B庫,這個時候相當於你擁有了A庫和B庫兩個庫的許可權,你可以自由的在這兩個庫下進行CRUD操作,如果你的資料庫有A,B,C這個時候你登入了A,B,C三個資料庫,你就可以在這三個資料庫下自由的操作,有點類似超級管理員的操作。

在admin庫下有一張users表,通過db.system.users.find();尋找所有的使用者,可以看到超級管理員roles是root,其他的使用者role是dbowner表示只有當前資料庫下的許可權。

總結:mongodb的資料許可權是和資料庫綁定的,這個也是可以理解的因為nosql資料庫無法使用join等聯集查詢,一個庫對應自己的使用者,當需要查詢全域的資料時,需要使用超級管理員,超級管理員也有自己的資料庫那個庫就是admin,也就是說在admin庫下建立的使用者都是超級管理員,具體所有庫的CRUD許可權


mongodb 集合的存取權限

用keyFile。詳見docs.mongodb.org/...curity
 
怎建立一個含有使用者名稱與密碼的mongodb的資料庫

  太小氣了,還是給你簡單說一說吧,下邊是我之前研究mongodb時候做的筆記中的一點部分。
  mongoDB預設使用者認證是關閉的。
  修改 /etc/mongod.conf 檔案。mongoDB預設情況下任何用戶端都可以串連27017連接埠,且沒有認證,預設情況下沒有系統管理員帳戶。通過修改這個設定檔可以更改為登陸時進行許可權認證。
  mongoDB中如果想要給某個資料庫建立一個使用者,需要首先進入該資料庫,然後使用addUser命令。在這裡也可以將使用者佈建為唯讀(db.addUser("jack","jack",true),第三個參數表示是否時“唯讀使用者”)。

  要使用超級管理員,需要先串連admin資料庫並登陸系統管理員帳戶,然後串連其他資料庫就可以行使管理員權限。

  使用者資訊儲存及認證過程

  類似MySQL將系統使用者資訊儲存在mysql.user表。MongoDB也將系統使用者的username、pwd儲存在admin.system.users集合中。其中pwd = md5(username + “:mongo:” + real_password)。這本身並沒有什麼問題。username和:mongo:相當於對原密碼加了一個salt值,即使攻擊者擷取了資料庫中儲存的md5 hash,也沒法簡單的從彩虹表中查出原始密碼。

  許可權管理常用命令

  1. #進入資料庫admin

  use admin

  2. #增加或修改使用者密碼

  db.addUser('name','pwd')

  3. #查看使用者列表

  db.system.users.find()

  4. #使用者認證

  db.auth('name','pwd')
這一個返回1就認證成功了,只有認證成功才能對資料庫進行操作

  5. #刪除使用者

  db.removeUser('name')

  6. #查看所有使用者

  show users

  7. #查看所有資料庫

  show dbs

  8. #查看所有的collection

  show collections

  9. #查看各collection的狀態

  db.printCollectionStats()

  10. #查看主從複製狀態

  db.printReplicationInfo()
 

相關文章

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.