MongoDB 配置用户的访问控制

MongoDB 配置用户的访问控制

实验目的

1.练习为MongoDB数据库设置用户

2.了解MongoDB数据库用户权限

实验原理

理解admin数据库:安装MongoDB时,会自动创建admin数据库,这是一个特殊数据库,提供了普通数据库没有的功能,例如,有些账户角色赋予用户操作多个数据库的权限,而这些角色只能在admin数据库中创建。检查凭证时,MongoDB将在指定数据库和admin数据库中检查用户账户。

创建用户账户

数据库管理的一个重要部分是创建能够管理用户和数据库以及读写数据库的用户账户。要添加用户,可在MongoDB shell中使用方法createUser()。createUser()将一个文档对象作为参数,让您能够指定用户名、角色和密码。下面列出了可在文档对象中指定的字段。

在这里插入图片描述

MongoDB提供了多种可分配给用户账户的角色,这些角色让您能够赋予用户账户复杂的权限和限制。下面列出了一些可分配给用户的常见角色。

在这里插入图片描述

提示:角色readAnyDatabase、readWriteAnyDatabase、dbAdminAnyDatabase和userAdminAnyDatabase只能分配给admin数据库中的用户账户,因为它们指定的是对所有数据库的权限。

实验环境

Linux Ubuntu 16.04

jdk-7u75-linux-x64

mongodb-linux-x86_64-3.4.2

实验内容

1.为MongoDB数据库创建一个超级用户、只读账户、读写账户

2.验证用户的相关权限及用户与库的关系

3.删除用户

实验步骤

1.启动MongoDB数据库。

cd /apps/mongodb/bin  
  
numactl ./mongod -config /apps/mongodb/bin/mongodb.conf  
  
./mongo  

在这里插入图片描述

2.现在创建一个超级帐号。

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

创建成功,其中user为用户名,pwd为密码,roles为指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选。

在这里插入图片描述

3.接下来我们关闭MongoDB数据服务,验证root账户。

db.shutdownServer()  
exit 

4.登录前应启用身份验证,使用vim命令编辑/apps/mongodb/bin目录中的mongodb.conf文件,将"#auth = true"前面的#去掉。

vim /apps/mongodb/bin/mongodb.conf  

在这里插入图片描述

5.开启mongod服务

numactl ./mongod -config /apps/mongodb/bin/mongodb.conf  

在这里插入图片描述

6.下面我们使用root超级用户,并指定admin库进行登录。

./mongo admin -u root -p strongs  

在这里插入图片描述

7.查询当前正在使用的数据库并查询所有数据库名称。

db  
show dbs  

查询成功!
在这里插入图片描述

8.在test数据库下,创建只读用户和读写用户。

use test  
db.createUser(  
     {  
       user: "zhangyur",  
       pwd: "zhangyur",  
     roles: [  
         { role: "read", db: "test" }  
      ]  
    }  
 )  
db.createUser(  
     {  
       user: "zhangyu",  
       pwd: "zhangyu",  
     roles: [  
         { role: "readWrite", db: "test" }  
      ]  
    }  
 )  

创建过程如下:

> use test  
adWrite", db: "test" }  
      ]  
    }  
 )  
switched to db test  
>  
> db.createUser(  
...      {  
...        user: "zhangyur",         #只读账户  
...        pwd: "zhangyur",  
...      roles: [  
...          { role: "read", db: "test" }  
...       ]  
...     }  
...  )  
Successfully added user: {  
    "user" : "zhangyur",  
    "roles" : [  
        {  
            "role" : "read",  
            "db" : "test"  
        }  
    ]  
}  
> db.createUser(  
...      {  
...        user: "zhangyu",           #读写账户  
...        pwd: "zhangyu",  
...      roles: [  
...          { role: "readWrite", db: "test" }  
...       ]  
...     }  
...  )  
Successfully added user: {  
    "user" : "zhangyu",  
    "roles" : [  
        {  
            "role" : "readWrite",  
            "db" : "test"  
        }  
    ]  
}  
>  

9.查看当前库下的所有用户。

show users  

在这里插入图片描述

上面创建了2个帐号,现在验证其权限。

10.输入exit命令,退出当前用户,进入到只读用户’zhangyur’。

exit  
./mongo test -u zhangyur -p zhangyur  

在这里插入图片描述

11.向集合mycollection中插入数据。

db.mycollection.insert({"a":1,"b":2})  

插入失败,因为我们当时创建用户时就只赋予它只读权限,因此无法插入数据,我们切换到拥有读写权限的’zhangyu’用户,再次插入数据。
在这里插入图片描述

db.auth('zhangyu','zhangyu')  
  
db.mycollection.insert({"a":1,"b":2})  

在这里插入图片描述

数据写入成功,再来执行查询命令及显示所有数据库。

db.mycollection.find()  
show dbs  

在这里插入图片描述

结果显示,读写用户zhangyu可以读数据但没有权限显示所有数据库。

12.跨库创建用户,切换到admin数据库,登录root用户,在admin库下创建test库的用户。

use admin  
  
db.auth('root','strongs')  
  
db.createUser(  
 {  
   user: "kuaku",  
  pwd: "kuaku",  
   roles: [  
    { role: "readWrite", db: "test" },  
          ]  
 }  
 )  

在这里插入图片描述

13.查询所有用户。

show users  

在这里插入图片描述

14.可以看到在admin库下存在’test’库的账户kuaku,切换到test库下验证kuaku用户。

use test  
db.auth('kuaku','kuaku')  

在这里插入图片描述

认证失败!我们再切换到’admin’库下验证kuaku用户。

use admin  
db.auth('kuaku','kuaku')  

在这里插入图片描述

认证成功!结果说明了在admin下创建的用户,不能直接在其他库验证,只能在用户的创建库下认证,数据库帐号是跟着数据库来走的,哪里创建哪里认证。

15.创建了这么多用户,我们来查询一下所有用户。

db.auth('root','strongs')  
  
db.system.users.find().pretty()  

内容为:

> db.system.users.find().pretty()  
{  
    "_id" : "admin.root",  
    "user" : "root",  
    "db" : "admin",  
    "credentials" : {  
        "SCRAM-SHA-1" : {  
            "iterationCount" : 10000,  
            "salt" : "sxS1NNukO08yH0iD6NY1jg==",  
            "storedKey" : "BxR3zPVY4Q+PyI0qzWIo/Op9o5k=",  
            "serverKey" : "DHGmsM6HdcSvIp6HEVxf4ycl+aU="  
        }  
    },  
    "roles" : [  
        {  
            "role" : "root",  
            "db" : "admin"  
        }  
    ]  
}  
{  
    "_id" : "test.zhangyur",  
    "user" : "zhangyur",  
    "db" : "test",  
    "credentials" : {  
        "SCRAM-SHA-1" : {  
            "iterationCount" : 10000,  
            "salt" : "+L5Zb17WZoxz3tPB7vHuyg==",  
            "storedKey" : "xRNYq8dWNYXALoUOASCLRFTjsDs=",  
            "serverKey" : "VjZTd17DzxGT4i1/HZtghsCiLL0="  
        }  
    },  
    "roles" : [  
        {  
            "role" : "read",  
            "db" : "test"  
        }  
    ]  
}  
{  
    "_id" : "test.zhangyu",  
    "user" : "zhangyu",  
    "db" : "test",  
    "credentials" : {  
        "SCRAM-SHA-1" : {  
            "iterationCount" : 10000,  
            "salt" : "3zNwiOGjZKo1SKxmEzm1eQ==",  
            "storedKey" : "lDJWImcDFQLG9ceiWCE/rpur89g=",  
            "serverKey" : "17ZkMcrvEvM/g8yTLkZlLQioPlo="  
        }  
    },  
    "roles" : [  
        {  
            "role" : "readWrite",  
            "db" : "test"  
        }  
    ]  
}  
{  
    "_id" : "admin.kuaku",  
    "user" : "kuaku",  
    "db" : "admin",  
    "credentials" : {  
        "SCRAM-SHA-1" : {  
            "iterationCount" : 10000,  
            "salt" : "KfRN8SAWb5aFoLdC6WOgXw==",  
            "storedKey" : "WoX3CZTnKNeP+qgBHcx+bNI5iys=",  
            "serverKey" : "pNxdPi3ugnPC7Pjl67t12V831vA="  
        }  
    },  
    "roles" : [  
        {  
            "role" : "readWrite",  
            "db" : "test"  
        }  
    ]  
}  

16.删除’kuaku’用户。

db.dropUser('kuaku')  

在这里插入图片描述

至此,实验结束!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值