首先要知道mongodb默认安装后是没有任何认证开启的,也就是说,所有能连接到服务器的人都能进数据查看,当然,你可以用防火墙来挡。但没有防火墙的保护,数据库暴露出来是非常危险的。
mongodb关于安全分为几个方面,主要是:认证,基于角色的访问控制(授权),审计,加密,部署和环境的安全(涉及到网络跟系统的访问环境)。
一 关于认证
使用用户名认证指令为:
mongo --port 27017 -u manager -p 12345678 --authenticationDatabase admin
创建系统级别的的admin用户,分配root角色,可以管理所有数据库,做任意的操作:
注意:创建用户产生的数据正常情况下应该保存在admin库统一管理,但也可以指定保存在其他数据库,先运行 use dbname,表示对dbname这个库操作,然后运行创建用户的命令之后,数据就保存在"dbname"数据库了
use admin db.createUser( { user: "superuser", pwd: "12345678", roles: [ "root" ] })
或者创建指定数据库的管理员用户:
use admin db.createUser( { user: "tracking", pwd: "track", roles: [ { role: "readWrite", db: "user_data_tracking" } , { role: "dbAdmin", db: "user_data_tracking" } ] } )
创建专门管理用户的用户:
use admin db.createUser( { user: "siteUserAdmin", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
userAdminAnyDatabase和userAdmin区别
userAdminAnyDatabase Provides the same access to user administration operations as userAdmin, except it applies to all databases in the cluster.
use products db.createUser( { user: "recordsUserAdmin", pwd: "password", roles: [ { role: "userAdmin", db: "records" } ] })
登录后可以查看用户权限,用此命令:
db.runCommand( { usersInfo:"manager", showPrivileges:true })
只分配只读权限:
use reporting db.createUser( { user: "reportsUser", pwd: "12345678", roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" } ] })