MongoDB的权限管理

在v2.6之前,MongoDB的权限管理比较简单,简单总结如下:

1、在admin和local库中创建的用户是超级用户。

我们先不加--auth参数启动数据库,开启一个shell连接数据库,此时是可以随意访问的;这时我们加上--auth参数重启MongoDB,虽然我们没有建立任何用户,但是刚才打开的shell中还是可以随意操作数据库,这是因为:before you createauser in the admin database, clients that are “local” to the server can performreads

andwrites on the database(《MongoDB.The.Definitive.Guide.2nd.Edition》P314)。

2、在其它应用数据库中建立的用户是普通用户,只能操作本数据库,但是不能showdbs(可否说权限粒度是collection级)。

   对于readOnly的用户,则只能查询,不能执行其它操作,也不能查询本库下system相关的collection,如

system.users(存放用户信息)

3、创建用户的命令:

db.addUser(“userName”,”passwd”,wetherReadOnly)

userName指示用户名,passwd指示密码,wetherReadOnly指示用户是否只有读权限,true表示用户只读。

鉴权的命令是db.auth(“userName”,”passwd”)

4、针对sharding,授权有点特殊

由于sharding的admin库在配置节点,所以各分片的admin库中没有用户,所以绕过mongos直接连接分片的话,默认是local模式,是可以做任何操作的(参见第1点)。

要避免这个,需要在各分片上分别再执行建立用户的操作。 不过要注意,一定要先把分片添加到集群中,然后再建用户,否则addShard的命令将不生效。

5、删除用户的命令

用户是针对数据库的,所以从对应库下的system.users集合中把相关用户记录删除即可。

如对于超级用户,要切换到admin库下:

use admin

db.system.users.remove()

这将会删除所有超级用户。

在v2.6之后,MongoDB的权限管理变得复杂了,在v3.0时,更进一步加强了,后续再说

评论
热度(1)

© 听雨残荷 | Powered by LOFTER