摘要:默认是不开启权限认证的,而我也是一直这么做的。自从上次爆发了赎金门事件,必须重视下的权限认证了。开启认证也很简单,在配置文件默认是里面加入这样一行就行了。
MongoDB version: v3.4.4
MongoDB默认是不开启权限认证的,而我也是一直这么做的。自从上次MongoDB爆发了赎金门事件,必须重视下MongoDB的权限认证了。
开启认证也很简单,在配置文件(默认是/etc/mongodb.conf)里面加入auth = true这样一行就行了。
这时你重启MongoDB服务进入mongo shell都是没问题的。但是如果你想插入一条数据,那么问题来了:
use foo; db.bar.insert({"faf": "faf"}) WriteResult({ "writeError" : { "code" : 13, "errmsg" : "not authorized on foo to execute command { insert: "bar", documents: [ { _id: ObjectId("5938e7f63be90aa05e12aecc"), faf: "faf" } ], ordered: true }" } })
说明权限认证生效了,一个没有认证通过的用户再也不能使用数据库了(即使能进mongo shell)。
那么问题又来了,我现在没有用户咋办?这是一个鸡和蛋的问题。怎么在没有用户的情况下新建用户?
MongoDB的开发者早已经想到了这一步。MongoDB自带一个数据库叫admin,这个数据库用来管理所有数据库的,类似于MySQL的mysql数据库。如果这个数据库的管理员账户还没有建立,那么任何人都可以在admin数据库里面新建管理员账户。
use admin; db.createUser({user: "admin", pwd: "adminer", roles: [{role: "userAdminAnyDatabase", db: "admin"}]})
先进入admin数据库,然后运行db.createUser方法新建用户。createUser方法必须传入一个有user(用户名)、pwd(密码),roles(角色)三个属性的JSON对象。user、pwd都可以理解,那这个角色又是啥?当我们尝试去管理一个数据库的时候发现,有很多权限需要处理,比如:数据库读、数据库写、数据库用户管理等等权限,我想建一个用户的话,给一个用户赋权限就十分复杂了。现在一种流行的方式是:我先定义一个角色,这个角色对应一组权限,那么我管理用户时就只要赋予一个角色就行了。真是方便了不少。那么这个userAdminAnyDatabase角色就是这样一个超级角色,有这个角色的用户可以给任意数据库新建用户,并且赋予任何角色,真是个狠角色。那么我们应该知道了,基本上所有的第一个建立的用户的角色都应该是userAdminAnyDatabase,好处就是以后可以用这个用户来管理其他用户了。
那么MongoDB内置了哪些角色呢?按照类别来分主要有:
Database User Roles
Database Administration Roles
Cluster Administration Roles
Backup and Restoration Roles
All-Database Roles
Superuser Roles
Internal Role
十分复杂,为了简单起见,就讲其中两个:read、readWrite也就是常用的读数据库和读写数据库。
建立了admin用户之后,还必须登录才行(必须在admin数据库才能登录),db.auth("admin", "adminer"),我再切换到foo数据库就可以给foo数据库创建用户啦(这里有一个不大不小的坑,就是你要给其他数据库创建用户,都必须先到admin数据库,认证刚才新建的那个admin用户,然后再切换到其他数据库才能建立用户)!
use foo; db.createUser({user: "foo", pwd: "bar", roles: [{role: "readWrite", db: "foo"}]}) db.auth("foo", "bar")
就可以往数据库里面写入啦!!!
原文链接:生信人
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/19016.html
摘要:一步一步构建一个应用开篇地址通过不认证的方式启动连接实例创建用户超级管理员重启,加上访问控制认证连接时认证连接后认证为其他库创建用户添加对有读写权限,对有读权限 [一步一步构建一个react应用-开篇](https://segmentfault.com/a/11... git地址 通过不认证的方式启动Mongodb mongod --port 3007 --config mongo...
摘要:一步一步构建一个应用开篇地址通过不认证的方式启动连接实例创建用户超级管理员重启,加上访问控制认证连接时认证连接后认证为其他库创建用户添加对有读写权限,对有读权限 [一步一步构建一个react应用-开篇](https://segmentfault.com/a/11... git地址 通过不认证的方式启动Mongodb mongod --port 3007 --config mongo...
摘要:一下安装数据库进入官网,选择相应的版本下载,安装时默认勾选安装服务和修改一些数据库配置,如已有数据库连接工具,可取消默认勾选的安装。 一、Win下安装数据库 进入mongo官网,选择相应的msi版本下载,安装时默认勾选安装MongoD服务和修改一些数据库配置,如已有数据库连接工具Robo 3T,可取消默认勾选的compass安装。 若启动服务报mp错误,可修改binmongod.cfg...
阅读 2988·2023-04-25 21:23
阅读 3021·2021-09-22 15:24
阅读 861·2019-08-30 12:55
阅读 2094·2019-08-29 18:42
阅读 2606·2019-08-29 16:27
阅读 942·2019-08-26 17:40
阅读 2172·2019-08-26 13:29
阅读 2603·2019-08-26 11:45