MongoDB 默认是没有帐号的,能够直接链接,无须身份验证。实际项目中确定是要权限验证的,不然后果不堪设想。从2016年开始 发生了多起MongoDB黑客赎金事件,大部分MongoDB安全问题 暴露出了安全问题的短板实际上是用户,首先用户对于数据库的安全不重视,其次用户在使用过程当中可能没有养成按期备份的好习惯,最后是企业可能缺少有经验和技术的专业人员。因此对MongoDB进行安全认证是必需要作的mongodb
use admin db.createUser( { user: "帐号", pwd: "密码", roles: [ { role: "角色", db: "安全认证的数据库" }, { role: "角色", db: "安全认证的数据库" } ] } )
user:建立的用户名称,如 admin、root 、lagou
pwd:用户登陆的密码
roles:为用户分配的角色,不一样的角色拥有不一样的权限,参数是数组,能够同时设置多个
role:角色,MonngoDB 已经约定好的角色,不一样的角色对应不一样的权限 后面会对role作详细解释
db:数据库实例名称,如 MongoDB 4.0.2 默认自带的有 admin、local、config、test 等,即为哪一个数
据库实例 设置用户shell
db.createUser( { user:"root", pwd:"123321", roles:[{role:"root",db:"admin"}] } )
db.changeUserPassword( 'root' , 'rootNew' );
db.grantRolesToUser( '用户名' , [{ role: '角色名' , db: '数据库名'}])
./bin/mongod -f conf/mongo.conf --auth (也能够在mongo.conf 中添加auth=true 参数)
db.auth("帐号","密码")
db.dropUser("用户名")
数据库内置的角色数据库
//通常设置
read:容许用户读取指定数据库
readWrite:容许用户读写指定数据库
//高级设置,拥有一下这些全权限的用户,至关于没有安全认证,权限过高了
dbAdmin:容许用户在指定数据库中执行管理函数,如索引建立、删除,查看统计或访问
system.profile
userAdmin:容许用户向system.users集合写入,能够找指定数据库里建立、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户全部分片和复制集相关函数的管理权限
readAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的dbAdmin权限
root:只在admin数据库中可用。超级帐号,超级权限
dbOwner:库拥有者权限,即readWrite、dbAdmin、userAdmin角色的合体
数据库用户角色:read、readWrite
数据库管理角色:dbAdmin、dbOwner、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色:backup、restore;
全部数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase
超级用户角色:root
这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、
userAdminAnyDatabase)
MongoDB 服务端开启安全检查以前,至少须要有一个管理员帐号,admin 数据库中的用户都被视为管理员,若是 admin 库没有任何用户的话,即便在其余数据库中建立了用户,启用身份验证,默认的链接方式依然会有超级权限,即仍然能够不验证帐号密码照样能进行 CRUD,安全认证至关于无效。数组
./bin/mongo --port 57017
>use admin switched to db admin > db admin > db.createUser( ... { ... user:"root", ... pwd:"123456", ... roles:[{role:"root",db:"admin"}] ... })
testdb 本身新建的数据库,没安全认证以前能够随意 CRUD,其他的都是 mongoDB 4.0.2 自带的数据库,安全
即便建立用户以后依然是能够随意 CRUD()函数
关闭 MongoDB 服务端,以后服务端会以安全认证方式进行启动spa
> use admin switched to db admin > db.shutdownServer() server should be down...
参考单机认证建立用户3d
安装psmisc
yum install psmisc
安装完以后可使用killall 命令 快速关闭多个进程
killall mongod
openssl rand -base64 756 > data/mongodb/testKeyFile.file chmod 600 data/mongodb/testKeyFile.file
在文件夹shard_cluster 下 mkdir /data/mongodb -prest
auth=true keyFile=data/mongodb/testKeyFile.file
keyFile=data/mongodb/testKeyFile.file
能够编写一个shell 脚本 批量启动 startup.sh ,受权 chmod +x startup.shcode
./bin/mongod -f mongo_17017.conf
./bin/mongod -f mongo_17018.conf
./bin/mongod -f mongo_17019.conf
./bin/mongod -f shard/shard1/shard1_37017.conf
./bin/mongod -f shard/shard1/shard1_37018.conf
./bin/mongod -f shard/shard1/shard1_37019.conf
./bin/mongod -f shard/shard2/shard2_47017.conf
./bin/mongod -f shard/shard2/shard2_47018.conf
./bin/mongod -f shard/shard2/shard2_47019.conf
./bin/mongos -f route/route_27017.conf
./startup.sh
down......................................................................................