MongoDB官方講解安全驗證:
http://www.mongodb.org/display/DOCS/Security+and+Authentication
在MongoDB中,服務啟動預設是沒有許可權驗證的,就安全性方面來說,這肯定是不行的,所以需要加上許可權驗證。
既然是要進行許可權驗證,那肯定是得有使用者的吧,所以許可權驗證的第一步就是給MongoDB庫添加使用者。
啟動MongoDB服務端,然後啟動MongoDB用戶端,在用戶端使用命令給MongoDB庫添加使用者,看代碼:
> db.addUser("jiangzhichao","jzc19880316");{ "user" :"jiangzhichao", "readOnly" :false, "pwd" :"f7559cfe0bc0a305f82c0d83664538fd"}
小知識:在admin庫裡面添加使用者是全域的,也就是說在admin中添加使用者,在其他庫裡面也是適用的。
要給MongoDB的伺服器端添加許可權驗證,需要在啟動MongoDB的服務的時候添加--auth參數,代碼如下:
d:\mongodb\bin>mongod --dbpath d:\mongodb\data --logpath d:\mongodb\log\mongodb.log --logappend --serviceName MongoDB --auth --installall output going to: d:\mongodb\log\mongodb.logCreating service MongoDB.Service creation successful.Service can be started from the command line via'net start "MongoDB"'. d:\mongodb\bin>net start"MongoDB"Mongo DB 服務正在啟動 .Mongo DB 服務已經啟動成功。
在這裡我是以服務的方式啟動MongoDB服務,第一條命令是安裝服務,第二條就是啟動服務了。
服務都已經啟動了,那就剩下開啟用戶端了,這個就簡單了,看代碼:
d:\mongodb\bin>mongoMongoDB shell version: 1.8.2connecting to: test> show dbs;Mon Oct 24 21:54:13 uncaught exception: listDatabases failed:{ "assertion" :"unauthorized db:admin lock type:-1 client:127.0.0.1", "assertionCode" : 10057, "errmsg" :"db assertion failure", "ok" : 0}
看到了吧,show dbs命令報異常了,再看異常的具體資訊,unauthorized db:admin lock,許可權驗證不通
Logging in as an admin userAlthough admin user accounts can access any database, you must log into the admin database. For example, if someAdminUser has an admin account, this login will succeed: > use admin> db.auth("someAdminUser", password)> // and then if desired switch databases:> use test
過啊!
那好,下面就進行許可權驗證,這裡嘮叨一下,在進行許可權驗證的時候,先退出用戶端,或者另起一個用戶端,代碼如下:
d:\mongodb\bin>mongo admin -u jiangzhichao -p jzc19880316MongoDB shell version: 1.8.2connecting to: admin> show dbs;admin 0.078125GBlocal (empty)test (empty)
命令格式:mongo [資料庫名] -u [使用者名稱] -p [密碼]
上面的show dbs可以執行並看到結果了。
到此,許可權驗證的過程就算完成了。
Mongodb安全的php處理,php官方有很完整的描述
http://php.net/manual/zh/mongo.security.php