1 設置管理員賬戶
use admin
db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
mongodb中的用戶是基於身份role的,該管理員賬戶的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用戶管理身份,’AnyDatabase’ 代表可以管理任何數據庫。
2 驗證
db.auth("useradmin", "adminpassword")
如果返回1,則表示成功。
3 修改配置文件(注意縮進)
sudo vi /etc/mongod.conf
#security:
security:
authorization: enabled
4 重啟mongodb
sudo service mongod restart
5 創建普通用戶
進入mongodb,用第3步的 管理員賬戶登錄,用該賬戶創建其他數據庫管理員賬號
+先進行管理員認證
use admin db.auth("useradmin", "adminpassword")
+設置其他庫的賬號密碼及權限
use yourdatabase db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })
rote:dbOwner 代表數據庫所有者角色,擁有最高該數據庫最高權限。比如新建索引等
- Read:允許用戶讀取指定數據庫
- readWrite:允許用戶讀寫指定數據庫
- dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
- userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
- clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
- readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
- readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
- userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
- dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
- root:只在admin數據庫中可用。超級賬號,超級權限
#coding=utf-8 #導入模塊 from pymongo import MongoClient #建立連接 client=MongoClient("localhost",27017) #數據庫名admin db=client.admin #認證用戶密碼 db.authenticate('root','123456') #創建集合和數據 db.test.insert({"name":"this is test"}) col=db.test #打印數據輸出 for item in col.find(): print item #關閉連接 client.close()
7 注意
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
use foo db.createUser( { user: "simpleUser", pwd: "simplePass", roles: [ { role: "readWrite", db: "foo" }, { role: "read", db: "bar" } ] } ) 現在我們有了一個普通用戶 用戶名:simpleUser 密碼:simplePass 權限:讀寫數據庫 foo, 只讀數據庫 bar。 注意 use foo表示用戶在 foo 庫中創建,就一定要 foo 庫驗證身份,即用戶的信息跟隨隨數據庫。
比如上述 simpleUser 雖然有 bar 庫的讀取權限,但是一定要先在 foo 庫進行身份驗證,直接訪問會提示驗證失敗。 use foo db.auth("simpleUser", "simplePass") use bar show collections 還有一點需要注意,如果 admin 庫沒有任何用戶的話,即使在其他數據庫中創建了用戶,啟用身份驗證,默認的連接方式依然會有超級權限
參考:
https://www.2cto.com/database/201802/724340.html