1. 程式人生 > >mongodb authentication 設定許可權之後,新建個管理賬戶和一般資料庫使用者,在win 7 64bit 環境下測試使用例項

mongodb authentication 設定許可權之後,新建個管理賬戶和一般資料庫使用者,在win 7 64bit 環境下測試使用例項

主要是解決在測試使用mongo db 時候,總是出現的MongoAuthenticationException  異常和 not authorized for query,not authorized on admin to execute command 等問題。

直接上測試步驟圖拉。


我這個是先解除安裝了原來的mongo服務,然後刪除我們配置的data資料夾下的所有東西,同時又清空原來測試生成的log。
主要是造就個乾淨的測試環境。
然後再次重新啟動服務,這個啟動服務是帶許可權認證的,也就是說,你沒有許可權認證,是不可以操作資料庫的。

你要回憶一下,你報上面的bug,是不是沒有弄這個,或者你的賬戶,是在開啟許可權認證之前就新增的user。

為了測試的準確性。我建議,像我這樣,直接全部幹掉,整個乾淨的測試環境,再來一遍。反正也挺快的。

進入mongo命令列的執行環境。在admin這個管理資料庫使用者的資料庫上添加個資料庫管理賬戶。再退出命令列shell。

mongod.exe --remove --serviceName "MongoDB"
mongod --config "D:\Mongo\mongo.conf"  --auth --install --serviceName "MongoDB"
net start MongoDB
use admin
db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]});(這個命令是解決問題的重點)
exit

所使用到命令,給你貼出來,方便你複製貼上到cmd命令列。


再次啟動也不能說是啟動,就是再次進入mongo的命令列模式,登入吧算是,並認證使用者和密碼

mongo --port 27017 -u admin -p password --authenticationDatabase admin
建立資料庫lxkdb,當在這個資料庫寫入資料的時候,這個資料庫就出現了。
use lxkdb
建立普通賬戶
db.createUser({user: "tester",pwd: "password",roles: [{ role: "readWrite", db: "lxkdb" }]});
選擇剛剛建立的資料庫
use lxkdb
然後進行資料庫許可權的認證,返回1就是認證OK,0就是認證失敗。這個也是重點,在操作資料庫之前要有那麼一次的許可權 認證。這個不是你從那個admin資料庫切換到這個lxkdb資料庫了嗎,所以要許可權認證一下,最好認證一下,
db.auth('tester','password')

db.student.save({name: 'zhangsan', age: 25, sex: true});
在資料庫lxkdb中,插入一條資料,這個表叫student,
show collections
顯示當前資料庫有的集合,也就是表啦。
db.student.find()
查student表全部。

下面是使用robomongo這個資料庫工具看到的測試結果。

這個工具的網址,算是個開源的專案吧。
http://blog.robomongo.org/robomongo-0-9-0-final/
我下載的到某度雲盤的分享
連結:http://pan.baidu.com/s/1bp8ALDP 密碼:iaie



上面這個使用的是mongo資料庫3.4版本,下面的使用的是2.6版本。稍有不同。



可以看到所有的資料庫,一共有三個,其中兩個是system級別的,admin和local,這兩個是mongo裝完之後,自帶的。還有個就是我剛剛建立的那個lxkdb資料庫啦,可以看到這個資料庫裡面 是有資料的。也是我剛剛插入的。

然後再使用一般的普通的資料庫賬戶登入,看看是什麼效果。




可以看到,普通賬戶登入之後,只能看到一個數據庫,也就是我剛剛自己建立的lxkdb這個資料庫。另外兩個是看不到的,這就是許可權的關係。

最後,有人說,這個mongo資料庫會自帶個test的資料庫,而且賬號密碼都是test,我就如下測試。


可以看到,理論是不成立的。並沒有這個所謂的test資料庫。所以

不要在道聽途說。誤人子弟啦,要自己測試一下。

至此,整個mongo在本地win 7 64 環境下使用的例項,就全部搞完啦。

再上個我使用的錯誤的圖,給米娜桑看看,也許有點借鑑意義呢。


關於在建立使用者的時候,那個roles的不同型別的理解。不知道全不全。

roles 使用者角色:
1. 資料庫使用者角色:read、readWrite;
2. 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級使用者角色:root