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......................................................................................