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