MongoDB的許可權管理

2021-10-10 16:39:51 字數 3788 閱讀 7106

mongodb 2.4新引入了一套許可權控制的機制,而舊的adduser的方法在3.0已經不再提供,這對我們管理mongodb造成了諸多不便。本文簡單總結一下新版mongodb關於許可權管控的一些技巧。

·mongodb使用了基於角色的訪問策略來管理mongodb的安全控制。可以賦予用於乙個或多個許可權來讓使用者能訪問資料庫的資源並進行某項資料庫的操作。如果不對用於賦予許可權,使用者沒有任何許可權。

·mongodb預設不啟用安全授權機制。在單節點環境下,你需要在啟動mongod時指定–auth,或者在引數裡設定auth=true來啟用這個特性。如果你是乙個shard集群或者rs的環境時,你就需要為每乙個節點指定keyfile,這個檔案內包含相同的字串資訊(不能包含符號),用於節點成員驗證。如果制定了keyfile,就預設對rs/集群啟用了auth。例如以此對mongodb中的member執行:

echo "mongomemberspassword" > /etc/mongod.key

echo "keyfile=/etc/mongod.key" >> /etc/mongod.conf

chown mongodb:root /etc/mongod.key

chmod 600 /etc/mongod.key

service mongod restart

·mongodb提供了很多內建角色,使用者通用的資料庫管理。內建角色的文件在這裡提供了資料庫管理許可權和資料庫使用者許可權兩種型別,其他的許可權只能作用於admin資料庫上。具體如下:

(1).資料庫使用者角色

針對每乙個資料庫進行控制。

read:提供了讀取所有非系統集合,以及系統集合中的system.indexes, system.js, system.namespaces

readwrite: 包含了所有read許可權,以及修改所有非系統集合的和系統集合中的system.js的許可權.

(2).資料庫管理角色

每乙個資料庫包含了下面的資料庫管理角色。

dbowner:該資料庫的所有者,具有該資料庫的全部許可權。

dbadmin:一些資料庫物件的管理操作,但是沒有資料庫的讀寫許可權。(參考:

useradmin:為當前使用者建立、修改使用者和角色。擁有useradmin許可權的使用者可以將該資料庫的任意許可權賦予任意的使用者。

(3).集群管理許可權

admin資料庫包含了下面的角色,使用者管理整個系統,而非單個資料庫。這些許可權包含了複製集和共享集群的管理函式。

clusteradmin:提供了最大的集群管理功能。相當於clustermanager, clustermonitor, and hostmanager和dropdatabase的許可權組合。

clustermanager:提供了集群和複製集管理和監控操作。擁有該許可權的使用者可以操作config和local資料庫(即分片和複製功能)

clustermonitor:僅僅監控集群和複製集。

hostmanager:提供了監控和管理伺服器的許可權,包括shutdown節點,logrotate, repairdatabase等。

備份恢復許可權:admin資料庫中包含了備份恢復資料的角色。包括backup、restore等等。

(4).所有資料庫角色

admin資料庫提供了乙個mongod例項中所有資料庫的許可權角色:

readanydatabase:具有read每乙個資料庫許可權。但是不包括應用到集群中的資料庫。

readwriteanydatabase:具有readwrite每乙個資料庫許可權。但是不包括應用到集群中的資料庫。

useradminanydatabase:具有useradmin每乙個資料庫許可權,但是不包括應用到集群中的資料庫。

dbadminanydatabase:提供了dbadmin每乙個資料庫許可權,但是不包括應用到集群中的資料庫。

(5). 超級管理員許可權

root: dbadmin到admin資料庫、useradmin到admin資料庫以及useradminanydatabase。但它不具有備份恢復、直接操作system.*集合的許可權,但是擁有root許可權的超級使用者可以自己給自己賦予這些許可權。

了解許可權了之後,就是賦權語句了。新版的函式比之前的要麻煩很多:

db.createuser(user, writeconcern)

user關於使用者的身份認證和訪問資訊(json);

writeconcern這個文件描述mongodb提供寫操作的成功報告。

user文件,定義了使用者的以下形式:

,

roles: [

| "",

...]}

user文件字段介紹:

user字段,使用者的名字;

pwd字段,使用者的密碼;

cusomdata字段,為任意內容,例如可以為使用者全名介紹;

roles字段,指定使用者的角色,可以用乙個空陣列給新使用者設定空角色;roles字段,可以指定內建角色和使用者定義的角色。

那麼建立乙個管理員,直接給幾個所有資料庫許可權即可。

db.createuser(,

,  ]})

建立某個資料庫的唯讀許可權,該使用者首先要使用」use db_name;」到對應的資料庫下建立許可權,否則它會建立在其他資料庫下面(比如admin)。

db.createuser(

]

以此類推。我們可以通過db.auth("username","password")或者下面的方式來驗證:

mongo -u test -p test.com --authenticationdatabase test

除了db.createuser(),下面幾個函式也是常用的:

獲得資料庫的所有使用者許可權資訊:db.getusers()

獲得某個使用者的許可權資訊:db.getuser()

建立角色:db.createrole()

更新角色:db.updaterole()

刪除角色:db.droprole()

獲得某個角色資訊:db.getrole()

刪除使用者:db.dropuser()

刪除所有使用者:db.dropallusers()

將乙個角色賦予給使用者:db.grantrolestouser()

撤銷某個使用者的某個角色許可權:db.revokerolesfromuser()

更改密碼:db.changeuserpassword()

mongodb 許可權管理

啟動mongod時加上 auth引數,開啟許可權認證 db.adduser username password 第三個引數是建立唯讀使用者 only read,預設readwrite 用此方法,在普通資料庫下,建立的是當前資料庫的使用者 在amdin資料庫下,建立的是root使用者 db.auth ...

MongoDB 許可權管理

mongodb預設是沒有許可權驗證的,但生產環境中,沒有許可權控制是很不安全的。我們先不詳談太多概念,直接動手建立兩個典型的賬號 在沒開啟許可權驗證機制的時候,我們在 命令指示符 視窗用mongo開啟mongodb的shell。使用 use 命令,切換到admin資料庫,mongodb用admin的...

mongodb 許可權管理

mongodb已經使用很長一段時間了,基於mongodb的資料儲存也一直沒有使用到許可權訪問 mongodb預設設定為無許可權訪問限制 今天特地花了一點時間研究了一下,研究成果如下 注 研究成果基於windows平台 mongodb在本機安裝部署好後 2.輸入命令 use admin,你會發現該db...