Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1298549
  • 博文数量: 127
  • 博客积分: 2286
  • 博客等级: 大尉
  • 技术积分: 1943
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-10 10:37
文章分类

全部博文(127)

文章存档

2018年(1)

2015年(2)

2014年(1)

2013年(30)

2012年(88)

2011年(5)

分类: Mysql/postgreSQL

2012-11-30 12:07:19

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})报assrtionCode:10057, errmsg: db assertion failure
原因是用了keyfile参数,但是config实例中没有用户
解决方法A:在所有的config server中添加相同的用户名和密码,然后用该用户在mongos中登录
解决方法B:去掉keyfile参数,重新启动所有实例,在mongos的admin数据库中添加管理用户,然后加上keyfile参数再重新启动所有实例



阅读(6310) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~