安全问题

Mongodb安装后自身是没有密码的,用户连接只需填写id地址,端口号,数据库名称即可,只要你服务器的mongodb数据库端口开放,任何人的电脑都可以连接到你的数据库,操作修改你的mongodb数据,盗取你的数据库,然后留下一个邮箱和账号,要求你给比特币才肯归还数据库给你

修改MongoDB集群管理员账号密码 mongodb如何修改密码_User

下面就简单记录下自己倒腾MongoDB时候设置密码的操作。

一、连接上MongoDB

在命令行输入mongo连接上数据库(默认数据库已经安装并且成功启动,不知道怎么安装启动可参考)输入show dbs查看数据库

修改MongoDB集群管理员账号密码 mongodb如何修改密码_用户名_02

二、切换到 'admin' 数据库 

use admin

修改MongoDB集群管理员账号密码 mongodb如何修改密码_用户名_03

三、给admin设置用户密码

db.createUser({user: 'root', pwd: '123456', roles: ['root']})

其中user: 用户名, pwd: 用户密码,roles: 用来设置用户的权限,如读,读写 等等

修改MongoDB集群管理员账号密码 mongodb如何修改密码_修改MongoDB集群管理员账号密码_04

四、验证是否设置成功

db.auth(用户名,用户密码) 这里用db.auth('root', '123456') 如果返回 '1'表示验证成功, 如果是 '0' 表示验证失败..

.

修改MongoDB集群管理员账号密码 mongodb如何修改密码_User_05

五、重启MongoDB

这次重启必须把设置的auth设置为true

修改MongoDB集群管理员账号密码 mongodb如何修改密码_MongoDB_06

到此admin也就是超级管理员的密码已经完成了,可操作所有的数据库,以及给单个数据库添加用户和权限,其连接方式为

xxx.db('mongodb://your name: your pwd@ ip :27017');
your name:为用户名
your pwd:为密码

使用可视化连接也需要输入密码,直接连接将报错

修改MongoDB集群管理员账号密码 mongodb如何修改密码_修改MongoDB集群管理员账号密码_07

使用刚才设置的root用户和密码123456连接

修改MongoDB集群管理员账号密码 mongodb如何修改密码_User_08

此时便可成功连接

修改MongoDB集群管理员账号密码 mongodb如何修改密码_User_09

到此,数据库密码设置就已经完成了。

现在要给特定的每个库设置权限,开发者可以直接用用户直接连指定的数据库操作,比如我这里有一个库,库名字叫做test,这里以test这个库为例,我们要给他新建一个用户userTest具有写的权限,开发者便可直接使用userTest这个账号密码去操作这一个数据库,而无法操作其他数据库

一、连接数据库后并切换到test数据库

use test

修改MongoDB集群管理员账号密码 mongodb如何修改密码_修改MongoDB集群管理员账号密码_10

二、为这个库添加一个用户,并且赋予权限

db.createUser(
                {
                    user:'testUser',
                    pwd:'123456',
                    roles: [{role:'readWrite',db:'test'}]
                }
)

这行代码意思是 创建一个testUser用户 给予读写权限 db表示该用户操作的数据库名 role设置为‘dbOwner’则表示该用户可对数据进行任何操作,对开发者一般都用dbOwner角色

修改MongoDB集群管理员账号密码 mongodb如何修改密码_数据库_11

mongodb role类型

  • 数据库用户角色(Database User Roles):

read:授予User只读数据的权限
readWrite:授予User读写数据的权限

  • 数据库管理角色(Database Administration Roles):

dbAdmin:在当前dB中执行管理操作
dbOwner:在当前DB中执行任意操作
userAdmin:在当前DB中管理User

  • 备份和还原角色(Backup and Restoration Roles):

backup
restore

  • 跨库角色(All-Database Roles):

readAnyDatabase:授予在所有数据库上读取数据的权限
readWriteAnyDatabase:授予在所有数据库上读写数据的权限
userAdminAnyDatabase:授予在所有数据库上管理User的权限
dbAdminAnyDatabase:授予管理所有数据库的权限

  • 集群管理角色(Cluster Administration Roles):

clusterAdmin:授予管理集群的最高权限
clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限
hostManager:管理Server
 

三、重启MongoDB

OK,一切搞定可单独使用testUser这个用户名去直接连接test这个库

xxx.db('mongodb://your name: your pwd@ ip :27017/test');
your name:为用户名就是testUser
your pwd:为密码就是123456

接下来在说一下删除用户:

一、首先用超级管理员登录

二、切换到要删除的用户所管理的数据库上

例如,testUser用户管理test数据库。首先切换到shop数据库

三、再删除shopuser用户

db.dropUser('testUser')