MongoDB已經使用很長一段時間了,基於MongoDB的數據存儲也一直沒有使用到權限訪問(MongoDB默認設置為無權限訪問限制),因為考慮到數據安全的原因特地花了一點時間研究了一下,網上搜出來的解決方法大都是3.0以下的版本的,所以不適合3.0+以上的版本。我現在用的版本是MongoDB3.2.7,在windows10系統上進行的驗證,估計在win7/win8上應該類似。
和其它數據庫一樣,權限的管理都差不多一樣。mongodb存儲所有的用戶信息在admin 數據庫的集合system.users中,保存用戶名、密碼和數據庫信息。mongodb默認不啟用授權認證,只要能連接到該服務器,就可連接到mongod。若要啟用安全認證,需要更改配置文件參數auth
1、首先,不使用--auth參數啟動MongoDB
systemLog: destination: file path: C:\data\dblog\mongod.log logAppend: true storage: journal: enabled: true dbPath: C:\data\db net: port: 27017 #security: #authorization: enabled
mongod -f C:\data\mongodb.conf

2、啟動mongo, 啟用admin數據庫

3、建立一個超級用戶admin,命令如下:
db.createUser(
{
user
:
"admin"
,
pwd:
"admin123"
,
roles: [ { role:
"userAdminAnyDatabase"
, db:
"admin"
} ]
}
)

4、查看用戶集合
db.system.users.find()

5、現在啟用auth
在重啟mongod之前,修改配置文件mongo.config,在最下面加入這么一行
auth = on
重啟mongod
mongod -f C:\data\mongodb.conf

然后重啟mongo,啟用admin數據庫,
顯示所有數據庫 : show dbs, 發現已經沒有權限了

啟用 auth
db.auth('admin', 'admin123') 返回1表示成功

再次執行show dbs

6、 啟用ta數據庫,查看該數據庫集合

很遺憾沒有權限,admin雖然是超級管理員,但是對具體的數據庫,還是需要有對應的用戶,用戶是和數據庫走的,因此還需要建立ta數據庫的用戶
建立針對ta數據庫的用戶
db.createUser({user:'test1',pwd:'test1',roles:[{role:'readWrite',db:'ta'}]})
需要注意的是在建立ta數據庫用戶的時候一定要先啟用ta數據庫,否則會出現問題
use ta


執行 db.auth('test1','test1')
然后再對ta數據庫進行相應的操作。

