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