安全问题
Mongodb安装后自身是没有密码的,用户连接只需填写id地址,端口号,数据库名称即可,只要你服务器的mongodb数据库端口开放,任何人的电脑都可以连接到你的数据库,操作修改你的mongodb数据,盗取你的数据库,然后留下一个邮箱和账号,要求你给比特币才肯归还数据库给你
下面就简单记录下自己倒腾MongoDB时候设置密码的操作。
一、连接上MongoDB
在命令行输入mongo连接上数据库(默认数据库已经安装并且成功启动,不知道怎么安装启动可参考)输入show dbs查看数据库
二、切换到 'admin' 数据库
use admin
三、给admin设置用户密码
db.createUser({user: 'root', pwd: '123456', roles: ['root']})
其中user: 用户名, pwd: 用户密码,roles: 用来设置用户的权限,如读,读写 等等
四、验证是否设置成功
db.auth(用户名,用户密码)
这里用db.auth('root', '123456')
如果返回 '1'表示验证成功, 如果是 '0' 表示验证失败..
.
五、重启MongoDB
这次重启必须把设置的auth设置为true
到此admin也就是超级管理员的密码已经完成了,可操作所有的数据库,以及给单个数据库添加用户和权限,其连接方式为
xxx.db('mongodb://your name: your pwd@ ip :27017');
your name:为用户名
your pwd:为密码
使用可视化连接也需要输入密码,直接连接将报错
使用刚才设置的root用户和密码123456连接
此时便可成功连接
到此,数据库密码设置就已经完成了。
现在要给特定的每个库设置权限,开发者可以直接用用户直接连指定的数据库操作,比如我这里有一个库,库名字叫做test,这里以test这个库为例,我们要给他新建一个用户userTest具有写的权限,开发者便可直接使用userTest这个账号密码去操作这一个数据库,而无法操作其他数据库
一、连接数据库后并切换到test数据库
use test
二、为这个库添加一个用户,并且赋予权限
db.createUser(
{
user:'testUser',
pwd:'123456',
roles: [{role:'readWrite',db:'test'}]
}
)
这行代码意思是 创建一个testUser
用户 给予读写权限 db表示该用户操作的数据库名 role设置为‘dbOwner’则表示该用户可对数据进行任何操作,对开发者一般都用dbOwner角色
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')