MongoDB用户安全配置

使用过MongoDB的朋友都知道MongoDB默认是不需要用户权限就可以访问的,不像mysql那样需要指定一个root用户及密码。那在我们项目开发中为了安全起见我们推荐开启用户权限,为我们的WEB加一道安全锁。本文就和大家来分享下如何开启并配置MongoDB账户安全。

数据库版本:3.4

操作系统:MacOS

这里不再介绍MongoDB的安装,具体安装可以查看MongoDB官方文档,具体地址如下:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/index.html

MongoDB安装成功后我们运行Mongo进入shell客户端输入show dbs可以查看数据库中的所有数据库列表。我们会看到有一个叫做admin的数据库,这个数据库就是数据库管理DB。输入use admin命令来选择admin数据库,再输入show collections命令来查看admin数据库中的集合(相当于Mysql中的表)列表,此时数据库中只有一个system.version集合。接下来我们要做的重点就是在admin数据库中添加用户,具体命令如下:

> show dbs;
> use admin;
> show collections;
> db.createUser({user:'root',pwd:'root',roles:['dbOwner','userAdminAnyDatabase']})

最后一条命令是添加用户的命令,这里需要注意createUser适用于3.X的版本,低于3.X的版本使用的是addUser方法来添加用户。官方解释如下:

那这个createUser方法里边参数空间是什么意思呢?具体定义如下:

{
user:"", // 账户用户名
pwd:"", // 账户密码
customData:{}, // 用户数据 此处可选
roles:[
{role:"",db:""}|"" // role指定用户角色 db指定所属数据库名称
]
}

如何要创建一个超级用户我们可以给用户分配的角色为userAdminAnyDatabase,这是官方的说法,但是只有这一个角色还不够,我们可以再给其添加一个dbOwner角色。如果是普通用户可以添加readWrite即读写权限角色。当然具体的角色还有很多,更多信息可以查看官方文档,具体地址如下:

https://docs.mongodb.com/manual/reference/method/db.createUser/#db.createUser

上边添加用户命令添加的就是一个超级用户,你也可以参照官方文档再添加一些普通用户。此时我们再运行show collections命令可以看到admin中增加了一个system.users集合,通过db.system.users.find().pretty()命令可以查看表中的用户信息。如果你想给自己的项目数据库添加管理账号可以切换到对应的数据库然后再运行db.createUser命令来添加,添加成功后可以到admin数据库中的system.users集合查看。

接下来退出mongodb客户端shell脚本后再次进入仍不需要使用密码就可以访问和操作数据库,因为前面有说过MongoDB默认是没有开启用户权限的,不过我们可以执行如下命令来临时开启用户权限。命令如下:

$ mongod --auth --port 27017 —dbpath  // 数据库存储位置可能通过mongod.conf配置文件查找(Mac下一般在/usr/local/etc/mongodb.conf位置) 当然这个存储位置可以按个人需要随意指定 具体指定要在mongodb.conf配置文件中指定

注意:以上命令使用的MongoDB服务端命令mongod,--auth指定开启认证权限,--port指定端口号默认为27017,--dbpath指定存储的数据库位置,执行此命令时可能会报如下错误:

上边的错误原因是说目前正在运行一个mongo进程,具体可以使用如下命令查看然后将这个mongo进程杀死:

$ ps -ef | grep mongod
$ kill pid // 把pid替换成mongo运行进程id

然后再次运行上边的命令,运行后再次进行mongo客户端,此时如果要对数据库进行操作则会报如下错误:

如果想对数据库进行操作我们需要将我们上边添加的root进行auth认证,具体命令如下:

> db.auth('username','password')

将username和password替换成上边添加的用户名和密码来进行auth认证。认证完就可以对数据库进行操作啦!

但是,这里需要注意的是当我们将上边的mongod --auth这个进程ctrl+c结束后,我们仍不需要使用密码就可以对数据库进行操作,上边也有说这只是临时的开启了MongoDB的用户权限。若想开启MongoDB的权限我们需要配置mongodb.conf配置文件,如何你不知道你的mongodb.conf在哪里你可以运行whereis mongodb命令来查看。找到mongodb.conf配置文件后我们可以对其进行配置,具体配置如下:

systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1
  port: 27017
security:
  authorization: enabled

注意上边的security就是我们的安全配置,authorization: enabled作用就是开启认证,要关闭的话可以将enabled改成disabled。当然关于配置的相关配置还有好多,具体可以参照官方文档,具体地址如下:

https://docs.mongodb.com/manual/reference/configuration-options/

以上是本人在配置MongoDB安全配置时具体操作,及在操作中遇到的一些问题,这里要提醒大家的时如果你的MongoDB版本比较低的话具体操作会有差异,也可能会遇到不同的问题,比如如果你更改了存储db的dbpath的话会有相关错误报告,具体解决办法是要将你的目录所属用户和组更改成mongodb。最后祝你配置顺利。

COMMENTS

[asdfasdfa]: afadfa

[adfa]: asdfasd

[charlotte]: <script>alert('我是付佳琪')</script>

[charlotte]: <script>alert('我是付佳琪')</script>

@

双哥PHP-一个致力于分享世界上最好的语言的网站

2013-2017©SGPHP