mongodb下載地址:官方下載
IDE工具:Robo 3T:官方下載redis
windows系統要求64位,最低2g內存,推薦8g內存及以上mongodb
安裝過程沒有須要配置的地方,直接下一步到結束,若是想要方即可以在環境變量中Path追加mongodb安裝文件的bin目錄數據庫
在想要保存數據庫的盤符新建文件夾mongodb 包含兩個子文件夾 data和log及一個mongod.cfg文件,log文件夾新建文本改成mongo.logwindows
其中mongod.cfg文件內容以下(本人用虛擬機只有一個C盤):服務器
dbpath=C:\mongodb\data
logpath=C:\mongodb\log\mongo.log
logappend=true
directoryperdb=true
auth=false
#port=55600app
#表示忽略該行,本示例沒有使用自定義端口,將採用默認端口27017,若是設置了端口號 ,以後鏈接mongo都須要指定服務器和端口號工具
以管理員身份運行命令提示符,若是已經配置過環境變量,直接運行 mongod,不然須要移動到mongodb安裝目錄的bin文件夾再執行mongod3d
若是報如下異常rest
可去 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145 下載vc_redist.x64.exe安裝便可blog
執行如下命令建立並開啓MongoDB服務(須要管理員權限)
sc create MongoDB binPath= "C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe --config=C:\mongodb\mongod.cfg --service"
net start MongoDB
接下來打開MongoDB Shell工具:在命令提示符中輸入 mongo 運行(若是已經設置端口12345,此處爲 mongo --port 12345)
此時的數據庫是沒有權限控制的,任何人均可以登陸到數據庫
輸入 show dbs; 顯示全部數據庫
輸入 use admin; 使用admin數據庫 分號是可選的
輸入 show collections 顯示全部文檔(關係型數據庫中表的概念)
輸入 show users 顯示全部用戶,當前沒有任何帳戶
接下來建立帳戶,確保是在use admin的狀況下:
db.createUser({
user:"root",
pwd: "123456",
roles: [ { role: "root", db: "admin" }]
})
db.createUser({
user:"sa",
pwd: "123456",
roles: [ { role: "userAdminAnyDatabase", db: "admin" },{ role: "read", db: "clearimg" } ]
})
註冊用戶登陸權限(這幾個帳號是在admin數據庫下,鏈接服務器即便有其餘數據庫權限也必須鏈接到admin)
db.auth("root","123456")
db.auth("sa","123456")
添加一個新的數據庫 mytest,只須要對mytest數據庫進行文檔操做,存在則調用,不存在則建立
在mytest數據庫新建帳號test,並註冊權限
db.createUser({
user:"test",
pwd: "123456",
roles: [{ role: "read", db: "mytest" } ]
})
db.auth("test","123456")
切換到admin數據庫添加test2用戶使其只擁有mytest數據庫的read權限
use mytest
db.createUser({
user:"test2",
pwd: "123456",
roles: [{ role: "read", db: "mytest" } ]
})
db.auth("test2","123456")
用show users 查看當前數據庫擁有的帳戶
最後用exit或者ctrl + c退出MongoDB Shell 到此爲止數據庫已經擁有對應的帳戶,沒有開啓權限驗證
接下來停用原有MongoDB服務(須要管理員權限)
net stop MongoDB
並更新mongod.cfg文件中的auth=true,執行啓動服務的指令(須要管理員權限)
net start MongoDB
如今已經開啓權限認證了,再次登陸打開MongoDB Shell ,輸入show dbs,發現報異常
exit退出MongoDB Shell,改用帳號登陸服務器
mongo -u sa -p 123456 localhost:27017/admin
嘗試登陸時不帶數據庫名,發現報權限錯誤
切換帳號test2登陸 分別嘗試鏈接到admin 和mytest會發現test2能夠登陸admin而不是mytest,但test2只有mytest的讀取權限,操做admin數據庫也是非法的
嘗試用test帳號登陸mytest數據庫並嘗試操做其餘數據庫
備份和恢復角色:bakcup restore
全部數據庫角色:
read 指定數據庫的只讀權限,擁有如下權限:
readWrite 擁有指定數據庫的讀寫權限,除了具備read權限,還擁有如下權限:
read和readWrite只要就是對庫中表的操做權限
dbAdmin 指定數據庫的管理權限
userAdmin 指定數據庫的用戶管理權限
clusterAdmin 集羣管理權限
readAnyDatabase 任何數據庫的只讀權限(和read類似)
readWriteAnyDatabase 任何數據庫的讀寫權限(和readWrite類似)
userAdminAnyDatabase 任何數據庫用戶的管理權限(和userAdmin類似)
dbAdminAnyDatabase 任何數據庫的管理權限(dbAdmin類似)
建立用戶 db.createUser({user:"username",pwd: "pwd",roles: [ { role: "rolename", db: "dbname" },{ role: "rolename2", db: "dbname2" } ]})修改密碼 db.changeUserPassword('usname','newpwd');添加角色 db.grantRolesToUser("username", [{ role: "rolename",db:"dbname"}] )刪除權限 db.revokeRolesFromUser("username",[{ role: "rolename",db:"dbname"}])刪除用戶 db.dropUser("username")