MongoDB Sharding中的用戶認證問題

MongoDB Sharding中的用戶認證問題 2012-11-30 12:07:19

分類: Mysql/postgreSQL


MongoDB Sharding中的用戶認證問題
===========================================================
在我上一篇文章中對用戶認證問題有錯誤的認識,這裏我專門寫篇文章來討論這個問題

從v2.2開始,Mongo Sharding完全支持用戶認證,包括只讀權限的問題,我搜索了下論壇方向這方面的信息沒有,官方的文檔也很模糊,我摸索了幾天,給大家

share一下:

1 關於keyfile和auth參數的問題

keyfile包含了auth參數,而且優先級更高,只有你設定了keyfile,auth參數被忽略,也就是開啓了用戶認證

對於shard和config實例,沒添加用戶前可以本地無驗證登錄,一旦添加用戶,認證即可生效,連當前的session都會失效,需要從新登錄
對於mongos實例由於它的一切信息來自config實例,必須要通過用戶認證

注意:keyfile參數必須子所有實例中指定,而且必須是同一個key

2 admin數據庫的問題
admin是一個特殊的數據庫,它不在整個sharding中複製
shard實例中的admin數據庫是本地的,當然在同一個replica set是一樣的,它僅限於登錄shard實例
config實例中的admin同時給config實例和mongos實例用於實例認證
在mongos中添加的用戶會同步到所有的config實例中
在config中添加的用戶不會同步到其它config實例中,因爲它不知道其它實例的存在

3 其它開啓了sharding的一般數據庫
用戶信息存在該數據庫的primary shardh中, config實例中沒有

比如:
mongos> db.system.users.stats();
{
"sharded" : false,
"primary" : "rs02",
"ns" : "demo.system.users",
"count" : 1,
"size" : 92,
"avgObjSize" : 92,
"storageSize" : 8192,
"numExtents" : 1,
"nindexes" : 1,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}

在primary shard是rs02, 在該shard實例中可以用改用戶登錄數據,而在rs01和rs03中就不可了
當然正規用戶是同個mongos來連接該數據庫

4 用keyfile常遇到的問題
addShard可成功,但是sh.shardCollection("demo.hwz",{_id:1})報a***tionCode:10057, errmsg: db assertion failure
原因是用了keyfile參數,但是config實例中沒有用戶
解決方法A:在所有的config server中添加相同的用戶名和密碼,然後用該用戶在mongos中登錄
解決方法B:去掉keyfile參數,重新啓動所有實例,在mongos的admin數據庫中添加管理用戶,然後加上keyfile參數再重新啓動所有實例


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章