mongodb添加管理员和用户

用户知识

a.MongoDB是没有默认管理员账号的,所以要先添加管理员账号,在开启权限认证。

b.切换到admin数据库,添加的账号才是管理员的账号。

c.用户只能在用户所在的数据库登录,包括管理员账号。

d.管理员可以管理所有的数据库,但是不能直接管理其它数据库,要先在admin数据库中认证才可以,也是为了 安全性考虑。

添加管理员

show dbs

查看数据库列表: 发现有admin和local两个数据库

进入admin 数据库:

use admin

然后查看admin下面有什么集合:

show collections

我们可以看到有两个表:

system.users(这张表是用来存放超级管理员的)

system.version

接下来:创建管理员账户:

> db.createUser(
    {user:'admin',
    pwd:'xiaojun',
    roles:
    [
        {role:'userAdminAnyDatabase',db:'admin'}
    ]
})

当添加完用户信息之后,我们的想法就是马上重新连接验证是否权限已经控制,这里就打击你了,当然还没有控制,这里我们还需要开启用户权限验证,因为MongoDB默认是不开启权限验证的,下面我们简单说一下如何开启权限验证:

在mongo.conf添加auth=true

重启服务:

退出mongo shell :
exit

停止mongodb服务:
net stop mongodb

启动mongodb服务:
net start mongodb


然后mongo进入shell: 进入admin

use admin

然后查看users表,发现没有权限访问:

image

当我们用admin登录认证后,就可以访问了:

db.auth('admin','xiaojun')

image

在这里我们创建一个集合:

use xiaojun

然后插入数据:

db.xiaojun.insert({name:'xiaojun'});

发现错误:

image

这是因为给admin授权的userAdminAnyDatabase权限只是针对用户管理的,对其它的表示没有操作权限的

b 关于MongoDB的内置角色,我们大概可以分为以下几种来简单说一下

b.1 DatabaseUserRoles(数据库用户角色):read、readWrite

b.2 Database Administration Roles(数据库管理角色):dbAdmin、dbOwner、userAdmin

b.3 Culster AdministrationRoles(管理员组,针对整个系统进行管理):clusterAdmin、clusterManager、clusterMonitor、hostManager

b.4 Backup and Restoration Roles(备份还原角色组):backup、restore

b.5 All-Database Roles(所有数据库角色):readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

b.6 Superuser Roles(超级管理员):root、(dbOwner、userAdmin、userAdminAnyDatabase这几个角色角色提供了任何数据任何用户的任何权限的能力,拥有这个角色的用户可以在任何数据库上定义它们自己的权限)

b.7 Internal Role(内部角色,一般情况下不建议设置):__system

下面我们创建一个超级管理员(超级管理员可以对任意数据库做任意操作,有最高权限):

use admin
db.createUser({user:'root',pwd:'root',roles:[{role:'root',db:'admin'}]})

授权给超级管理员:
db.auth('root','root');

然后我们创建一个数据库xiaojun和集合child,并插入数据:

use xiaojun

db.child.insert({name:'xiaojun'})

我们发现上面的操作都可以进行,这就是超级管理员的作用,拥有一切权限。

注意注意:在哪个数据库创建的角色就需要在哪个数据库下授权,才能成功:

比如:我们有两个数据库:xiao和da

我们在da下,创建指向数据库xiao的角色用户(user:'xiao'):

use da

db.createUser({user:'xiao',pwd:'xiao',roles:[{role:'read',db:'xiao'}]})

好了,我们创建成功了,当我们切换到xiao,然后授权给用户角色(user:'xiao'):

use xiao

db.auth('xiao','xiao')

然后发现失败了,不能授权

image

这是因为,user:xiao角色是在da数据库下创建的,所以必须在da数据库下才能授权成功

我们切换到da用户,然后授权给user:xiao:

use da
db.auth('xiao','xiao')

image

其实我们查看用户是在那个数据库下创建的,也可以查看该用户是授权给哪个数据库(即是它的权限是操作哪个数据库的):

use admin
db.system.users.find()

image