开发fragmentwall的时候最开始是在本地进行开发,当我部署到服务器时我需要本地连接到服务器的mongodb数据,中间涉及了远程连接和权限验证设置。经过查阅文档已经完成,在此进行记录方便以后查阅和帮助其他需要的朋友。
创建用户
首先不要开启权限校验,你先创建一个超级用户。使用这个超级用户再去创建其他的用户和权限。
1.切换到admin数据库
use admin
切换到admin数据,默认mongodb是没有这个数据的不过没有关系,当我们创建一个用户后它会自动创建。
2.创建一个超级用户
在admin数据库下使用下面的命令你可以给admin
数据库创建一个超级用户
db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
执行完命令之后需要验证用户是否创建完毕使用命令 show users
可以查看用户信息,如果有刚才创建的admin用户代表创建成功,然后使用exit
退出控制台。
3.开启权限校验
mongodb数据库配置文件默认在/etc/mongod.conf
中,使用你喜欢的编辑器打开它。sudo vim /etc/mongod.conf
然后将如下的安全设置打开(默认它是使用#注释起来的)
security:
authorization: enabled
4.修改mongodb监听地址
默认的mongodb监听地址为bindIp: 127.0.0.1
,它只允许本地连接,现在修改为bindIp: 0.0.0.0
,这样你可以远程进行连接了。
net:
port: 27017
bindIp: 0.0.0.0
4.重启mongodb服务
使用命令sudo service mongod restart
重启你的mongodb服务
5.创建授权用户
这个时候你可以为不同的数据库创建不同的用户和权限了,首选你需要连接上数据库,然后切换到admin数据库中
use admin
切换到admin数据库中`
接着登录超级用户
db.auth("admin", "adminpassword")
跟着再切换到你要授权的其他数据库,比如我们需要将一个数据库testdatabase
授权给monster这个用户,那么先要切换到testdatabase
use testdatabase
接着创建monster用户并且给予对应权限,命令如下
db.createUser({ user: "monster", pwd: "monsterpassword", roles: [{ role: "dbOwner", db: "testdatabase" }] })
执行完创建用户,所有的工作已经完成,下面来验证一下是否正确使用show users
查看用户信息是否正确。然后使用这个用户登录再次验证。
db.auth("monster", "monsterpassword")
show collections
如果上面一切正确,那么monster就有了访问testdatabase
这个数据的权限了
6.在程序中连接使用
那么mongodb连接的字符串为
mongodb://youruser:yourpassword@localhost/yourdatabase
官方关于安全的文档