MongoDB用户权限管理配置

MongoDB系列第一课:MongDB简介

MongoDB系列第二课:MongDB环境搭建

MongoDB系列第三课:MongDB用户管理

MongoDB系列第四课:MongoDB数据库、集合、文档的操作

 

Mongodb作为时下最为热门的数据库,那么其安全验证也是必不可少的,否则一个没有验证的数据库暴露出去,任何人可随意操作,这将是非常危险的。我们可以通过使用为MongoDB创建用户的方式来降低风险。

 

MongoDB用户权限列表

read

允许用户读取指定数据库

readWrite

允许用户读写指定数据库

dbAdmin

允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin

允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户

clusterAdmin

只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限

readAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限

root

只在admin数据库中可用。超级账号,超级权限

 

MongoDB用户使用

一、 创建DB管理用户

mongodb有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。

管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase角色即可。

另外管理员账户必须在admin数据库下创建,3.0版本后没有admin数据库,但我们可以手动use一个。注:use命令在切换数据库时,如果切换到一个不存在的数据库,MongodDB会自动创建该数据库。

 

1.1 切换到admin库

管理员需要在admin数据库下创建,所以我们需要切换到admin数据库。

 

1.2 查看admin中的用户

可以通过db.system.users.find()函数来查看admin库中的所有用户信息。

目前在admin库中没有用户,所以查无结果。

 

1.3 db.createUser函数

在MongoDB中可以使用db.createUser({用户信息})函数创建用户。

db.createUser({ 
    user: "<name>",
    pwd: "<cleartext password>",
    customData: { <any information> },
    roles: [
        { role: "<role>", db: "<database>" } | "<role>",
        ...
    ]
});

1)user:新建用户名。

2)pwd:新建用户密码。

3)customData:存放一些用户相关的自定义数据,该属性也可忽略。

4)roles:数组类型,配置用户的权限。

  

1.4 创建管理员用户

我们现在需要在admin库中创建一个名为bjsxt的管理员用户,密码为bjsxtpwd。

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

创建成功后会看到如下提示:

 

1.5 重启MongoDB

在管理员账户创建完成后,我们需要重新启动MongoDB,并开启验证。

重新启动函数:db.shutdownServer()。

 

 

1.6 使用权限方式启动MongoDB

在默认的情况下MongoDB是不开启用户认证的。如果我们添加用户,那么需要开启用户认证机制。通过修改mongodb.conf配置文件,在文件中添加auth=true即可。

修改完成后启动MongoDB。

 

1.7 用户认证

创建管理员后,需要认证方可使用该用户,否则会提示需要认证。

认证函数:db.auth(‘用户名’,’密码’)

如果结果返回1,则表示认证成功,返回0则表示认证失败。

登录成功后可查询用户

 

二、 创建普通用户

普通用户由管理员创建。通常需要指定某个数据库来操作。

 

2.1 需求

我们创建一个sxt数据库,给这个数据库添加一个用户,用户名为itsxt,密码为itsxtpwd。并授予该用户对sxt数据库进行读写操作的权限。

 

2.2 使用管理员用户登录

普通用户需要由管理员创建并授权。所以,我们首先做的就是用管理员账户登录数据库。

 

2.3 创建sxt数据库

use命令切换数据库时如果该库不存在,那么则会创建该数据库。

 

2.4 创建普通用户

 

2.5 使用普通用户

打开一个新的客户端。

 

2.6 切换到sxt数据库

由于我们是在sxt数据库中创建的itsxt用户,所以需要先切换到sxt库。

 

 

2.7 登录普通用户

如果我们不登录会发现无法对该数据库进行插入操作。因为缺少用户认证。

 

通过认证函数对用户进行登录认证。

 

认证成功后操作通过该用户操作sxt库。该用户对sxt库具备读写操作。

 

 三、 更新用户角色

如果我们需要对已存在的用户的角色做修改,那么我们可以使用db.updateUser()函数来更新用户角色。注意,该函数需要当前用户具有userAdminAnyDatabase或者更高的权限。

 

3.1 更新角色语法格式

db.updateUser( "用户名","roles":[{"role":"角色名称"},{"更新项2":"更新内容"}])

 

3.2 需求

目前bjsxt管理员用户只具备userAdminAnyDatabase用户管理角色,我们为该用户添加一个dbAdminAnyDatabase数据库管理角色。

 

3.3 更新角色

db.updateUser("bjsxt",{roles : [{"role" : "userAdminAnyDatabase","db" : "admin"},{"role" : "dbAdminAnyDatabase","db" : "admin"}]})

如果没有提示任何信息则表示更新成功。退出当前客户端重新连接即可生效。

 

3.4 查看用户信息

通过show users命令查看到bjsxt用户的角色已经发生改变。

 

四、 更新用户密码

更新用户密码有两种方式:

1)使用db.updateUser()函数更新密码。

2)使用db.changeUserPassword()函数更新密码

 

4.1 更新密码方式一

使用db.upateUser()函数将bjsxt用户的密码修改为sxt

语法格式:db.updateUser("用户名",{"pwd":"新密码"})

 

 

4.2 更新密码方式二

使用db.changeUserPassword()函数将bjsxt用户的密码修改为sxtpwd。

语法格式:db.changeUserPassword("用户名","新密码")

 

如果未提示任何信息则表示更新成功。退出当前客户端重新连接认证即可。

 

重新使用bjsxt用户登录

 

五、 删除用户

通过db.dropUser()函数可删除指定用户。删除成功后会返回true。在删除用户时需要切换到创建时用户所指定的数据库中才可以删除。注意:需要使用具有userAdminAnyDatabse角色管理员用户才可以删除其他用户。

 

5.1 需求

我们使用db.dropUser()函数将itsxt用户删除。

 

5.2 切换数据库

itsxt用户在sxt数据库中,所以需要先切换到sxt数据库。

 

5.3 通过函数删除用户

 

我们可以看到,该函数返回了true,表示删除成功。

posted @ 2017-03-21 18:08  喻聪  阅读(10453)  评论(0编辑  收藏  举报