Linux下MongoDB权限管理

来源:互联网 发布:淘宝网地板砖 编辑:程序博客网 时间:2024/06/06 00:53

一、MongoDB权限介绍

1. MongoDB安装完成后,默认是不需要输入用户名密码即可登录的,但是往往数据库方面我们会出于安全性的考虑而设置用户名密码,本篇文章主要介绍了MongoDB添加管理员/普通用户的方法。
2. 在我们使用的关系型数据库中,一般都是含有权限控制的,也就是说配置什么用户访问什么数据库,什么数据表,什么用户可以对表进行增删改,什么用户可以对表进行读取等等都是可以配置,那么MongoDB作为一个非关系型数据库的典型,它其实也是可以配置的,而掌握MongoDB的权限我们只需要简单理解下面几点,后面按照下面的几点去配置即可(网上学习所得到的总结)。
2.1 MongoDB是没有默认管理员账号的,所以要先添加管理员账号,在开启权限认证。
2.2 切换到admin数据库,添加的账号才是管理员的账号。
2.3 用户只能在用户所在的数据库登录,包括管理员账号。
2.4 管理员可以管理所有的数据库,但是不能直接管理其它数据库,要先在admin数据库中认证才可以,也是为了 安全性考虑。

二、MongoDB添加管理员账户

1.上面简单的说明之后,下面我们需要开始连接数据库进入cli管理界面,只有进入此页面之后我们才能够对其进行操作。
2 如图所示,则连接成功,我们即可在>后面进行操作。连接数据库并且切换到用户表下
2.1 连接成功之后首先我们输入命令:show dbs,我们发现其系统中内置了一个数据库名字为local(如果大家查询出来还有一个admin数据库,那是因为你使用的是低版本的MongoDB),admin库是不存在的,需要我们自己创建。
2.2 (use admin) 使用此命令创建一个admin数据库,权限管理就要使用admin数据库,此命令也是切换数据库的命令。
2.3 (show collections) 切换到admin库之后,使用show collections查询,我们发现该数据库下包含了一个system.user和system.version表,我们主要来看system.user表。
2.4 (db.system.users.find())首先使用命令查询system.user表中是含有数据,输入命令:db.system.users.find(),查询发现数据库是空的,这时候我们给这个表添加一个管理员账户。
3. 添加用户并且为用户指定角色和数据库,参考Linux下MongoDB安装和配置详解。
4. 用户验证登录, 切换到admin数据库下,使用db.auth("pfnieadmin","123456");参考Linux下MongoDB安装和配置详解。

三、MongoDB的roles角色简单介绍

1. MongoDB内置角色官网文档介绍:http://docs.mongoing.com/manual-zh/reference/built-in-roles.html
2. 关于MongoDB的内置角色,我们大概可以分为以下几种来简单说一下
2.1 Database User Roles(数据库用户角色):read、readWrite
2.2 Database Administration Roles(数据库管理角色):dbAdmin、dbOwner、userAdmin
2.3 Culster Administration Roles(管理员组,针对整个系统进行管理):clusterAdmin、clusterManager、clusterMonitor、hostManager
2.4 Backup and Restoration Roles(备份还原角色组):backup、restore
2.5 All-Database Roles(所有数据库角色):readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
2.6 Superuser Roles(超级管理员):root、(dbOwner、userAdmin、userAdminAnyDatabase这几个角色角色提供了任何数据任何用户的任何权限的能力,拥有这个角色的用户可以在任何数据库上定义它们自己的权限)
2.7  Internal Role(内部角色,一般情况下不建议设置):__system
3. 关于上面每一个角色的意义是什么,请自行去官网或者这篇文章http://www.cnblogs.com/SamOk/p/5162767.html查看.

四、MongoDB下创建一个新的数据库并且配置读写(read、readWrite)权限管理的案例说明

1. 在上面我们在admin数据库下为pfnieadmin用户建立了一个userAdminAnyDatabase角色,使用这个用户来管理用户,可以通过这个角色来创建、删除角色。首先我们切换到admin下授权用户登录(重新连接之后的操作),命令如下:
step1: use admin
step2: db.auth("pfnieadmin","123456")  返回1则表示授权成功,否则授权失败。
step3: show dbs  验证授权是否成功。
2. 授权成功之后,首先我们创建一个数据库(kgpc),给kgpc数据库创建一个read和readwrtite账号。命令如下:
step1: use kgpc
step2: db.createUser({
                  user:"jackread",                                   
                  pwd:"123456",
                  roles:[
            {role:"read",db:"kgpc"}
           ]
             })
step3: 添加读写用户,命令如下:
db.createUser({
                  user:"jackreadwrite",                                   
                  pwd:"123456",
                  roles:[
            {role:"readWrite",db:"kgpc"}
           ]
             })
step4: 最后查询我们添加的用户如下所示,则说明我们对其读和读写用户添加完成,执行这个命令,注意下kgpc数据库下面.
 
3. 上面我们创建了两个账号之后,首先我们来验证读写账号:
3.1 首先我们进入到kgpc数据库,然后对jackread进行验证,之后对kgpc数据库下的country表进行插入,会提示我们插入失败,没有权限,如下如所示:
use kgpc
db.auth("jackread","123456");
db.country.insert({"id":"1","name":"中国"});

3.2 从上面看到提示我们权授权失败,这时候用我们创建的jackreadwrite(读写)账号授权,然后在进行插入和查询,则发现插入以及查询均成功,如图所示:

use kgpc
db.auth("jackreadwrite","123456");
db.country.insert({"id":"1","name":"中国"});
db.country.find();
3.3 从上面我们看到对于读写权限验证没有问题。
4. 上面测试了读写权限,下面我们测试一下读权限(read)
4.1 继续上面的操作,然后对jackread进行验证,之后对kgpc数据库下的country表查询,如图所示:

 

参考文献

1. MongoDB学习笔记—权限管理

0 0
原创粉丝点击