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