monsterooo / blog

and make promises by the hours
MIT License
14 stars 1 forks source link

如何开启mongodb(3.0+)权限认证和远程链接 #5

Open monsterooo opened 6 years ago

monsterooo commented 6 years ago

在开发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

官方关于安全的文档

希望能帮助到你 :)