MongoDB权限设置

本文详细介绍如何在MongoDB中设置权限,包括创建用户管理员、数据库管理员及普通用户,并演示了数据库和集合的操作流程。

MongoDB权限设置

1、下载安装mongodb

https://www.mongodb.com/download-center?jmp=nav#community
https://www.mongodb.com

下载完成后点击安装一直点击下一步,知道完成为止

如果你要把服务安装到进程管理列表,可以参考我的这篇文章,不过这次练习中最好暂时不要安装到进程
参考链接:http://blog.youkuaiyun.com/lzy_zhi_yuan/article/details/76438864

2、启动mongodb

mongod -dbpath "F:\MongoDB\data" 



说明:-dbpath 后面的路径是你本地手工创建用来存mongodb数据的文件夹
          启动时不能添加--auth参数。即以不做身份验证的方式启动mongodb

3、连接到mongodb服务

新开一个cmd命令行,输入:
mongo

4、切换到admin数据库

show dbs
use admin


5、创建一个用户管理员

说明:注意区分用户管理员和数据库管理员的概念。用户管理员应该只有创建用户的权限

            用户管理员账户应该以userAdminAnyDatabase作为唯一的角色

db.createUser(
{user: "useradmin",
pwd: "123456",
roles: ["userAdminAnyDatabase"]}
)

关于userAdminAnyDatabase代表什么意思,文章后面有常用的角色详细的介绍



6、成功创建用户管理员后,重启mongodb服务

Ctrl + c 终止上次启动的服务
输入:
mongod -dbpath "F:\MongoDB\data"  --auth
以验证是否方式启动mongodb服务

说明:注意创建用户管理员后,以验证身份方式启动Mongodb服务


7、再次访问验证身份的mongodb
Ctrl + c 终止上次访问的客户端
输入:
mongo
现在输入show dbs 


看到没,提示你没有权限

创建数据库hello看看
use hello
db.hello.insert({})



注意:mongodb只有当你创建一个集合时,才会真正创建数据库,所以user hello这一步并没有创建数据库,所以没有提示not authorized

至此,就恭喜你完成用户和数据库权限管理的至关重要的一步,接下来,我们来创建数据库管理员


7、创建数据库管理员


db.createUser(
{
user: "dbadmin",
pwd: "123456",
roles: ["readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterAdmin"]
}
)

关于readWriteAnyDatabase、dbAdminAnyDatabase、clusterAdmin代表什么意思,文章后面有常用的角色详细的介绍

你应该会创建失败,因为你现在只是连接到mongodb,并没有验证到某个身份的权限,怎么办呢。不要紧,来执行下面的命令后,再试试

use admin
验证到拥有创建用户的权限到admin数据库
db.auth("useradmin", "123456")
再执行:

db.createUser({
user: "dbadmin",
pwd: "123456",
roles:["readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterAdmin"]
})

如果你一步步按照文章方式去执行,那么,在这一步,你是成功创建了数据库管理员的

你可以执行: show users 
你应该可以看到两个用户

当你需要管理用户时就执行:db.auth("useradmin", "123456")
当你需要管理数据库时就执行: db.auth("dbadmin", "123456")
你应该知道这两个命令的意义,就是验证到不同的权限到admin数据库,请注意:在执行这两个任意一个命令时,必须先执行 use admin

另外,你还可以在一开始访问mongodb服务时,指定验证到哪个数据库的哪个权限
mongo admin --username "useradmin" --password "123456" 
mongo admin --username "dbadmin" --password "123456" 

8、创建数据库

请紧跟步骤:
show dbs
use hello
db.createCollection("helloCol")
如果执行失败,可能是当前用户的权限不是dbadmin而是其它用户,执行:
use admin
db.auth("dbadmin", "123456")
use hello
db.createCollection("helloCol")
你应该是成功的

9、创建某个数据库普通用户并赋予权限

请紧跟步骤:
use admin
db.auth("dbadmin", "123456")
use hello
db.createUser(
{
user:"laige",
pwd:"123456",
roles:["readWrite"]
}
)
请问你创建成功了吗?如果没有成功,那么你知道为什么吗?
继续执行:
use admin
db.auth("useradmin", "123456")
use hello
db.createUser(
{
user:"laige",
pwd:"123456",
roles:["readWrite"]
}
)
请问你创建成功了吗?如果成功,那么你知道为什么这次可以成功吗?
你应该都知道的,如果不知道,请从头再看一遍

10、验证普通用户权限

请紧跟步骤:
use admin
db.auth("laige", "123456")
验证失败,因为用户laige是hello数据库的用户
use hello
db.auth("laige", "123456")
验证成功
执行: 
use hello2
db.createCollection("hello2Col")
执行结果失败
再执行:
use hello
db.createCollection("helloCol3")
执行结果成功
恭喜你,你已经成功创建一个普通用户,这个用户是没有创建数据库的权限的,但可以在hello数据库中创建集合,就是读写hello数据库的权限

11、复制数据库

请紧跟步骤:
show dbs
db.copy("hello", "hello_clone", ["localhost"])
如果执行失败,可能是当前用户的权限不是dbadmin而是其它用户,执行:
use admin
db.auth("dbadmin", "123456")
db.copy("hello", "hello_clone", ["localhost"])

12、删除数据库

请紧跟步骤:
show dbs
use hello
db.dropDatabase()
如果执行失败,可能是当前用户的权限不是dbadmin而是其它用户,执行:
use admin
db.auth("dbadmin", "123456")
use hello
db.dropDatabase()
show dbs

13、创建集合

请紧跟步骤:
use hello_clone
show collections
db.createCollection("helloCol2", [autoIndexId:true])
创建一个只能存500条数据的封顶集合,通常用于存储日志内容
db.createCollection("helloCol3", [capped: true, max: 500, autoIndexId: false])

在新版autoIndexId选项已经被遗弃,这里我只是告诉你有这个选择,表明自动为添加到集合的每个文档创建一个_id字段并实现该字段上的索引
默认是true,对封顶集合应该是false;老版本的是autoIndexID,新版本会报错的哦

最后别忘了执行:show collections 看看结果

14、删除集合

请紧跟步骤:
use hello
show collections
coll = db.getCollection("helloCol2")
coll.drop()
show collections
db.helloCol2.drop()
show collections

15、角色详解

下面详解创建用户时的角色权限

read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值