mongoDB之用戶及權限設置

  以前用MongoDB沒有設置用戶和權限,一直都是本機應用程序鏈接MongoDB。在服務器上部署後對外沒有開數據庫鏈接端口,本機應用程序鏈接再開放應用程序端口供外部訪問。想一想很不對勁仍是設置下用戶受權吧。mongodb

  我部署的環境是windows下MongoDB2.4.8版本。首先要開啓安全模式的話,在啓動MongoDB服務的時候就要加上--auth參數,命令以下:shell

D:\mongodb>mongod.exe --dbpath D:\mongodb\data --logpath=D:\mongodb\logs\mongodb.log --auth

     這樣的話再鏈接MongoDB操做的時候就須要必定的權限。數據庫

 1、首先咱們須要在沒有加"--auth"權限參數啓動服務進行用戶權限管理windows

  咱們這樣啓動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" }spa

2、咱們關掉以前開啓的服務,添加"--auth"權限參數,從新啓動MongoDB服務code

D:\>mongod --dbpath D:\mongodb\data --logpath=D:\mongodb\logs\mongodb.log --auth

咱們再次鏈接並操做:blog

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

 3、添加完頂層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

4、設置完admin帳戶後開啓帶權限參數的MongoDB服務在可視化管理器中管理用戶權限

  在windows下我使用了MongoVUE可視化管理工具。創建新鏈接:

  以前啓動不帶auth參數的服務時,不添加用戶名密碼鏈接是能夠鏈接的,由於設置了auth參數因此這裏必須添加用戶名和密碼;把上面設置的admin用戶sa填入就能夠鏈接上了。 鏈接上以後打開一個庫,裏面有個Users設置

    

  這裏能夠對某一個庫進行用戶的添加刪除修改等操做,這是最高權限的admin視圖,若是用test庫的test用戶登陸的話,視圖就只能看見test庫了

 

  以上就是windows下使用MongoDB在shell和可視化工具中對用戶權限設置的簡單操做方法。

相關文章
相關標籤/搜索