mongoDB之用戶及權限設置


之前用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和可視化工具中對用戶權限設置的簡單操作方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM