Mongodb默认启动是不带认证的,也没有账号,只要连接上服务就可以进行CRUD操作。作为数据库软件,为了保证数据的安全,可以采用以下方法提高数据访问的安全性:
1、绑定要访问MongoDB服务所在的ip内网地址
在启动时添加--bind_ip参数用以限制只允许某一特定IP地址访问MongoDB服务,如:服务端限制只有58.20.3.52这个IP可以访问MongoDB服务
客户端访问时需要指定服务端的IP,否则会报错:
此时服务端和客户端位于一台机器,所以IP一致
2、设置监听端口
默认的监听端口是27017,我们可以修改这个监听端口,如:将服务器监听端口修改为27018
当服务端指定了端口后,客户端访问时需要明确指定端口才可以访问
3、使用用户名和口令登陆
MongoDB默认启动是不需要用户名和密码的,一个MongoDB实例中的每个数据库都可以拥有许多用户,使用--auth开启安全性检查,则只有数据库认证的用户才能执行读写操作。
1、添加用户,使用addUser('username’, ‘password’,
‘是否只读true|false(default)' )
在admin数据库中的用户被视为超级管理员,--auth开启安全认证检查之前一定要有个管理员帐号。
test普通数据库中添加了两个普通账户tom和tory,而tory账户只拥有readOnly权限。
2、开启安全认证检查(--auth)
启动MongoDB服务时添加-auth参数开启安全认证,开启安全认证检查之前一定要有个管理员帐号
带有-auth参数时,必须通过认证才可以查询数据。如果没有加-auth参数,即使配置了安全认证用户,也不需要认证谁都可以操作。
3、用户认证
使用--auth开启安全性检查之后,则只有数据库认证的用户才能执行读写操作
db.auth('tom' ,'123')用户认证,tom用户具有test数据库下的读写权限
tory用户只有test数据库下的读权限
非特权用户不能使用show dbs查看所有数据库,作为超级管理员root用户,可以对所有数据库进行任意操作。
system.user
每个数据库的用户账号都是以文档形式存储在system.users集合里面的,
文档结构{'user':username, 'readOnly':true, 'pwd': password
hash}。password hash是根据用户名和密码生成的散列。
查询某个数据库下的用户db.system.users.find();
删除某个数据库下的所有用户db.system.users.remove(),删除指定用户db.system.users.remove({'user':'用户名'})