1、下載
官網:http://www.runoob.com/mongodb/mongodb-window-install.html
由於是在window下,所以我下載的是mongodb-win32-x86_64-2008plus-ssl-3.2.7-signed.msi,和普通安裝軟件exe一樣,一直點下一步,中途改改安裝路徑。
2、配置
安裝之后,還需要配置,比如數據庫的數據安裝路徑,日志路徑等等。
MongoDB將數據目錄存儲在 db 目錄下。但是這個數據目錄不會主動創建,需要我們在安裝完成后需要手動創建。
為日志文件,數據文件和配置文件創建目錄
配置文件目錄:D:\MongoData\config\mongod.cfg
日志文件目錄:D:\MongoData\dblog\
數據文件目錄:D:\MongoData\db\
接着再配置mongod.cfg
systemLog: destination: file path: D:\MongoData\dblog\mongod.log logAppend: true storage: journal: enabled: true dbPath: D:\MongoData\db net: port: 27017 #security: #authorization: enabled
3、安裝服務
配置好上面后,在到cmd
中執行(使用管理員權限):
D:\Program Files\MongoDB\Server\3.2\bin>mongod.exe --config "D:\MongoData\config\mongod.cfg" --install
安裝成功
啟動mongodb服務
net start MongoDB
服務成功啟動
可以看看日志文件:后來去查看日志文件: D:\MongoData\dblog\mongod.log
關閉mongodb服務
net stop MongoDB
刪除Windows服務
兩種方式:
1、 D:\Program Files\MongoDB\Server\3.2\bin> mongod --config D:\MongoData\config\mongod.cfg --remove
2、在系統管理員窗口輸入:sc delete MongoDB
4、用戶權限設置
1、MongoDB是沒有默認管理員賬號,所以要先添加管理員賬號,再開啟權限認證。
2、切換到admin數據庫,添加的賬號才是管理員賬號。
3、用戶只能在用戶所在數據庫登錄,包括管理員賬號。
4、管理員可以管理所有數據庫,但是不能直接管理其他數據庫,要先在admin數據庫認證后才可以。
創建管理員賬號
在admin數據庫中,添加一個用戶並賦予userAdminAnyDatabase
角色。
例如,下面是在admin數據庫中創建一個名為myUserAdmin
用戶。
注意:你創建用戶的這個數據庫(這里就是admin數據庫)是用戶認證數據庫, 盡管用戶是在這個數據庫認證,而用戶又有其他數據庫的角色;即,用戶認證數據庫不限制用戶權限。
在window
管理員下啟動cmd
,並且連接上mongodb
,
連接命令:D:\Program Files\MongoDB\Server\3.2\bin>mongo.exe
創建用戶命令:
use admin db.createUser( { user: "myUserAdmin", pwd: "mypass123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) #結果 Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
查看用戶
show users
db.system.users.find()
5、開啟權限驗證
配置文件:D:\MongoData\config\mongod.cfg
注意:要開啟配置文件的authorization的權限
systemLog: destination: file path: D:\MongoData\dblog\mongod.log logAppend: true storage: journal: enabled: true dbPath: D:\MongoData\db net: port: 27017 security: authorization: enabled
接着就是重啟mongod
實例。說明了就是重啟mongodb服務。
6、驗證權限是否生效
7、添加普通用戶
1、一旦經過認證的用戶管理員,可以使用db.createUser()去創建額外的用戶,你可以分配mongodb內置的角色或用戶自定義的角色給用戶。
2、這個myUserAdmin用戶僅僅只有特權去管理用戶和角色,myUserAdmin,如果你試圖執行其他任何操作,例如在test數據庫中的foo集合中去讀數據,mongodb將返回錯誤。
3、你創建用戶的數據庫(這里就是test數據庫)是該用戶認證數據庫。盡管用戶認證是這個數據庫,用戶依然可以有其他數據庫的角色。即用戶認證數據庫不限制用戶權限。
7.1、創建讀寫用戶
MongoDB shell version: 3.2.7 connecting to: test > use admin switched to db admin > db.auth('myUserAdmin', 'mypass123') 1 > db.createUser( ... ... ... { ... ... ... user: "ott1", ... ... ... pwd: "ott1", ... ... ... roles: [ ... ... ... { role: "readWrite", db: "OTT_DB" }, ... ... ... ] ... ... ... } ... ... ... ) Successfully added user: { "user" : "ott1", "roles" : [ { "role" : "readWrite", "db" : "OTT_DB" } ] } > use OTT_DB switched to db OTT_DB > db.auth("ott1","ott1") Error: Authentication failed. 0
從上面發現在use admin狀態下創建數據庫OTT_DB的用戶ott1,在授權時失敗
先刪除ott1
刪除命令:db.dropUser("ott1")
> use admin switched to db admin > db.auth("myUserAdmin","mypass123") 1 > use OTT_DB switched to db OTT_DB > db.auth("ott1","ott1") 1 > db.dropUser("ott1") true >
因此在創建數據庫OTT_DB用戶之前,必須進入到OTT_DB狀態
use OTT_DB switched to db OTT_DB > db.createUser( ... ... ... { ... ... ... user: "ott_test", ... ... ... pwd: "ott_test", ... ... ... roles: [ ... ... ... { role: "readWrite", db: "OTT_DB" }, ... ... ... ] ... ... ... } ... ... ... ) Successfully added user: { "user" : "ott_test", "roles" : [ { "role" : "readWrite", "db" : "OTT_DB" } ] } >
驗證用戶權限
關閉mongo.exe,重新打開mongo.exe
關閉mongo.exe,重新打開mongo.exe
可以看出,進入OTT_DB數據庫,要查看test集合里面的數據,必須先授權,輸入用戶名和密碼,否則無法查詢
如果要刪除ott_test ,必須首先首先:use admin 然后 db.auth('myUserAdmin', 'mypass123'),再use OTT_DB, 最后執行 db.dropUser("ott_test") 才能成功刪除數據庫 OTT_DB對應的用戶
7.2、創建只讀用戶
給OTT_DB數據庫創建只讀用戶ott2,注意:必須首先進入admin數據庫,然后授權,然后進入OTT_DB數據庫,然后才能創建用戶
MongoDB shell version: 3.2.7 connecting to: test > use admin switched to db admin > db.auth('myUserAdmin', 'mypass123') 1 > use OTT_DB switched to db OTT_DB > db.createUser( ... ... ... { ... ... ... user: "ott2", ... ... ... pwd: "ott2", ... ... ... roles: [ ... ... ... { role: "read", db: "OTT_DB" }, ... ... ... ] ... ... ... } ... ... ... ) Successfully added user: { "user" : "ott2", "roles" : [ { "role" : "read", "db" : "OTT_DB" } ] } >
關閉mongo.exe,重新打開mongo.exe,驗證ott2用戶是否是只讀用戶
MongoDB shell version: 3.2.7 connecting to: test > use OTT_DB switched to db OTT_DB > db.auth("ott2","ott2") 1 > db.test.find() { "_id" : ObjectId("59f837e28d41d3c11f04f7c8"), "name" : "mike" } { "_id" : ObjectId("59f838bd38e747cd423fcb23"), "name" : "kite" } > db.test.insert("name":"myname") 2017-10-31T17:40:54.586+0800 E QUERY [thread1] SyntaxError: missing ) after argument list @(shell):1:21 > db.test.insert({"name":"myname"}) WriteResult({ "writeError" : { "code" : 13, "errmsg" : "not authorized on OTT_DB to execute command { insert: \"test\", documents: [ { _id: ObjectId('59f8453659d24d08aaa61d31'), name: \"myname\" } ], ordered: true }" } }) >
由此可見ott是只讀用戶
8、MongoDB數據庫角色
內建的角色
數據庫用戶角色:read、readWrite;
數據庫管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
備份恢復角色:backup、restore;
所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級用戶角色:root // 這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
內部角色:__system
角色說明:
Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限