之前用MongoDB沒有設置用戶和權限,一直都是本機應用程序連接MongoDB。在服務器上部署后對外沒有開數據庫連接端口,本機應用程序連接再開放應用程序端口供外部訪問。想想很不對勁還是設置下用戶授權吧。
我部署的環境是windows下MongoDB2.4.8版本。首先要開啟安全模式的話,在啟動MongoDB服務的時候就要加上--auth參數,命令如下:
D:\mongodb>mongod.exe --dbpath D:\mongodb\data --logpath=D:\mongodb\logs\mongodb.log --auth
這樣的話再連接MongoDB操作的時候就需要一定的權限。
一、首先我們需要在沒有加"--auth"權限參數啟動服務進行用戶權限管理
我們這樣啟動MongoDB服務:
D:\mongodb>mongod.exe --dbpath D:\mongodb\data --logpath=D:\mongodb\logs\mongodb.log
這時不指定用戶連接mongodb,是可以登錄並操作的,我的操作如下:
D:\>mongo
MongoDB shell version: 2.4.8
connecting to: test
> show dbs admin (empty) local 0.078125GB >
可以看到默認顯示兩個庫,我們需要進入admin庫進行權限設置(這個時候因為服務沒有添加權限參數,所以默認是有權限進行相關設置的)
> use admin
switched to db admin
> db.addUser('sa','sa')
{
"user" : "sa",
"readOnly" : false,
"pwd" : "75692b1d11c072c6c79332e248c4f699",
"_id" : ObjectId("53af835ada88ac42a40917a0")
}
> db.system.users.find()
{ "_id" : ObjectId("53af835ada88ac42a40917a0"), "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699" }
二、我們關掉之前開啟的服務,添加"--auth"權限參數,重新啟動MongoDB服務
D:\>mongod --dbpath D:\mongodb\data --logpath=D:\mongodb\logs\mongodb.log --auth
我們再次連接並操作:
D:\>mongo
MongoDB shell version: 2.4.8
connecting to: test
> use admin
switched to db admin
> show collections
Sun Jun 29 11:17:27.103 error: {
"$err" : "not authorized for query on admin.system.namespaces",
"code" : 16550
} at src/mongo/shell/query.js:128
發現如果不加身份信息默認連接的話,是沒有權限操作的。我們驗證下之前添加的用戶,再操作試下:
> db.auth('sa','sa')
1 //返回1表示驗證成功,返回0表示驗證失敗
> show collections system.indexes system.users
發現驗證成功可以對admin庫進行操作了,我們再連接其他庫試試:
D:\>mongo
MongoDB shell version: 2.4.8
connecting to: test
> show collections Sun Jun 29 11:20:17.996 error: { "$err" : "not authorized for query on test.system.namespaces", "code" : 16550 } at src/mongo/shell/query.js:128 > db.auth('sa','sa') Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } 0
發現這里驗證失敗了,之前設置的admin用戶驗證不管用。查了資料知道必須先從admin登錄再use其他庫才能被驗證通過:
D:\>mongo
MongoDB shell version: 2.4.8 connecting to: test > use admin switched to db admin > db.auth('sa','sa') 1 > use test switched to db test > show collections
三、添加完頂層admin用戶,可以用admin賬戶進行其他用戶的設置
如果想讓單獨的庫有單獨的用戶名就得先從admin登錄然后設置相應的用戶信息,具體操作如下:
D:\>mongo
MongoDB shell version: 2.4.8 connecting to: test > use admin switched to db admin > db.auth('sa','sa') 1 //先從admin登錄 > use test switched to db test > show collections > db.addUser('test','test') //添加test庫的用戶 { "user" : "test", "readOnly" : false, "pwd" : "a6de521abefc2fed4f5876855a3484f5", "_id" : ObjectId("53af874c5017b6747e68da2a") }
再次單獨登錄test試試:
D:\>mongo
MongoDB shell version: 2.4.8
connecting to: test
> show collections //未登錄沒有權限 Sun Jun 29 11:27:52.899 error: { "$err" : "not authorized for query on test.system.namespaces", "code" : 16550 } at src/mongo/shell/query.js:128 > db.auth('test','test') //之前設置的賬戶 1 //登錄成功 > show collections system.indexes system.users
四、設置完admin賬戶后開啟帶權限參數的MongoDB服務在可視化管理器中管理用戶權限
在windows下我使用了MongoVUE可視化管理工具。建立新連接:
之前啟動不帶auth參數的服務時,不添加用戶名密碼連接是可以連接的,因為設置了auth參數所以這里必須添加用戶名和密碼;把上面設置的admin用戶sa填入就可以連接上了。 連接上之后打開一個庫,里面有個Users設置
這里可以對某一個庫進行用戶的添加刪除修改等操作,這是最高權限的admin視圖,如果用test庫的test用戶登錄的話,視圖就只能看見test庫了
以上就是windows下使用MongoDB在shell和可視化工具中對用戶權限設置的簡單操作方法。