MongoDB 3.0 安全權限訪問控制,在添加用戶上面3.0版本和之前的版本有很大的區別
帳號是跟著庫走的,所以創建用戶需要在指定庫里創建
添加用戶
用有權限的用戶(如admin),登入主節點,選中對應需要加用戶的數據庫,執行:
db.createUser({
user:'用戶名',
pwd:'密碼',
roles:[
{
role: "read",
db: "數據庫名"
}
]
});
展示當前數據庫的用戶及權限
show users;
修改用戶密碼
db.changeUserPassword('用戶名','密碼');
更新用戶
db.updateUser(
"用戶名",
{
roles:[
{
role: "read",
db: "數據庫名"
}
],
pwd: "密碼"
}
)
在原有基礎上增加用戶權限
db.grantRolesToUser(
"用戶名",
[
{
role:"readWrite",
db:"數據庫名"
}
]
)
刪除用戶
db.dropUser("用戶名")
權限說明
Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限
其他
我們在查看服務當前連接有那些, 可以執行
db.serverStatus().connections;
如果發現沒有執行該指令的權限, 比如:
not authorized on admin to execute command { serverStatus...
應該使用超級管理員用戶切換到admin數據庫去執行該指令, 如果不是超級管理員, 需要對該用戶(比如admin用戶)授權root權限
db.grantRolesToUser("admin",[{role:"root",db:"admin"}])
上述指令只能查到當前的連接數量,沒有詳細的客戶端IP信息, 比如如下結果:
{
"current" : 14,
"available" : 838846,
"totalCreated" : 8922168,
"active" : 2
}
如果想要查看連接的IP和端口, 可以使用:
db.currentOp(true).inprog.forEach(function(d){if (d.client)printjson(d.client)})
得到如下結果示例:
"172.16.20.180:51302"
"172.16.20.180:44510"
"172.16.50.240:36624"
"172.16.50.240:52220"