色婆ijqwj 发表于 2018-10-26 10:44:04

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参数再重新启动所有实例

页: [1]
查看完整版本: MongoDB Sharding中的用户认证问题