mongoDB設置權限認證
安裝MongoDB后auth認證默認是關閉的
如何開啟權限認證?
cmd打開面板
打開數據庫:輸入mongod --dbpath 文件夾絕對路徑 --auth
此時,無法查看數據庫 , 但可以進入指定數據庫
此時admin庫是不可見的(舊版本不可見,新版本里只是admin下的用戶相關的system.users不可見)
進入數據庫
創建權限賬號
user:用戶名
pwd:密碼
db:指定該用戶的數據庫,admin是用於權限控制的數據庫,如果沒有需要新建一個
roles:指定用戶的角色,可以用一個空數組給新用戶設定空角色;在roles字段,可以指定內置角色和用戶定義的角色。role里的角色可以選:
Built-In Roles(內置角色):
1. 數據庫用戶角色:read、readWrite;
2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級用戶角色:root
// 這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內部角色:__system
具體角色的功能:
Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限
創建所有數據庫管理用戶
db.createUser({ user: "root", pwd: "root", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
創建指定數據庫管理用戶
db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "readWrite", db: "admin" }] })
注意:
1.創建用戶時指定的built-in roles(數據庫操作權限)也是與庫綁定的,指定的哪個庫的角色,就擁有哪個庫的操作權限
2.不同的庫下可以存在相同的用戶名,即admin.root用戶和test.root用戶是可以同時存在的。
3.一般來說創建一個root角色的超級用戶root即可(或一個__system權限的system用戶),創建一些普通權限的用戶做日常操作。
切換到對應權限的數據庫進行權限校驗
use admin //切換到對應權限的數據庫db.auth("root","root") //對用戶名和密碼進行權限校驗
此時 , 可以對數據庫展開賬戶權限之內的操作
修改密碼
db.changeUserPassword('root','rootNew')
注意:密碼修改后 , 依舊可以對數據庫進行操作 , 若退出重新登錄,則需要輸入新密碼
修改權限
db.grantRolesToUser("test", [{ role: "userAdmin", db: "test" }])
注意:修改過后 , 用戶依然還保留了修改前的權限 , 此操作相當於增加了用戶權限 , 所以需要解除舊權限
解除權限
刪除用戶
關於集群用戶和集群驗證具體還未涉及 , 持續學習中....