Mongodb權(quán)限管理
站在用戶的角度思考問題,與客戶深入溝通,找到克什克騰網(wǎng)站設(shè)計(jì)與克什克騰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋克什克騰地區(qū)。版本:Mongodb3.0
說(shuō)到對(duì)數(shù)據(jù)庫(kù)我安全問題我們一般就會(huì)從以下幾點(diǎn)考慮怎么去解決數(shù)據(jù)庫(kù)安全的問題。
1.最安全的是物理隔離:
2.網(wǎng)絡(luò)隔離:
3.防火墻隔離:
4.用戶名和密碼:
下面我們來(lái)說(shuō)說(shuō)mongodb的用戶名和密碼認(rèn)證:
認(rèn)證是確定client身份的機(jī)制,默認(rèn)情況下mongodb并沒有開啟權(quán)限認(rèn)證,我們部署好MGDB之后需要進(jìn)行,一般常用mongodb權(quán)限認(rèn)證的方式有:
1.auth開啟(在啟動(dòng)的時(shí)候知道--auth=true)
2.Keyfile開啟
怎么進(jìn)行認(rèn)證,在命令行mongo --auth或者在配置文件里加入配置信息,來(lái)開啟認(rèn)證;auth是一個(gè)布爾值,只需要在配置文件里加入auth=ture就開啟認(rèn)證了,那Keyfile呢?
Auth和keyfile的區(qū)別:
Auth : 單機(jī)實(shí)例認(rèn)證,
Keyfile : 副本集和分片之間驗(yàn)證;
復(fù)制集是一個(gè)整體,復(fù)制集之間通信需要驗(yàn)證對(duì)方的身份,因?yàn)闆]有Keyfile,所以節(jié)點(diǎn)之間是不知道其他節(jié)點(diǎn),Keyfile是集群節(jié)點(diǎn)間的一個(gè)×××明,怎么去創(chuàng)建keyfile,我們可以去使用openssl命令;
[root@localhost ~]# openssl rand -base64 111 .keyFile
[root@localhost ~]# cat .keyFile
EG8ABQZU9C87lPRKFVbClBYhxTw8Hyv91NkOoqLBF3eRfnAUxPCTcevB82fYM+Zo+tPOjnsPiVZrCZmAsG26ZFrB/SHhTj/E+F3QARFWKnm4DJNBhzLnjZOKtoao61BMcRAye0H7HG0geMQtbGBX
在未開啟keyfile認(rèn)證的時(shí)候不去創(chuàng)建用戶,否則也會(huì)當(dāng)keyfile配置重啟后,用戶創(chuàng)建可能進(jìn)行回滾,當(dāng)我們進(jìn)行創(chuàng)建完成keyfile后再進(jìn)行認(rèn)證創(chuàng)建用戶;
Keyfile的注意:
1.內(nèi)容 base64編碼集【a-z A-Z + /】
2.長(zhǎng)度 1000bytes
3.權(quán)限 chmod 600 keyfile
現(xiàn)在我們開始傳教
創(chuàng)建用戶
語(yǔ)法;
db.createUser(
{
User:
pwd:
Roles:
}
)
創(chuàng)建root用戶,在創(chuàng)建之前我們開啟的auth認(rèn)證,但是庫(kù)沒有任何用戶,那我們需要添加參數(shù)setParametmer=enableLocalhostAuthBypass=1,來(lái)跳過認(rèn)證情況下本機(jī)登錄無(wú)需認(rèn)證。
創(chuàng)建root用戶的時(shí)候,是一個(gè)全局用戶,必須只能創(chuàng)建在admin庫(kù)
> db.createUser({user:'admin',pwd:'123123',roles:[{role:'root',db:'admin'}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
[root@localhost ~]# mongo localhost:27017
MongoDB shell version: 3.0.12
connecting to: localhost:27017/test
> show dbs
admin 0.078GB
local 0.078GB
> use admin
switched to db admin
> show users
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin", #你這個(gè)用戶是創(chuàng)建在admin庫(kù)
"roles" : [
{
"role" : "root",
"db" : "admin" #角色的作用域
}
]
}
> db.auth('admin','123123') #認(rèn)證
>1 #認(rèn)證成功
刪除用戶:
1、db.dropUser(
2、db.dropAllUser() 刪除所有用戶,
如何修改用戶密碼:
角色:
什么是角色:對(duì)某一個(gè)資源的權(quán)限的集合
mongodb有什么角色:
MongoBD有兩種角色
1.自帶 的角色(bulid-in roles)
讀寫:
read 、readWrite
管理員:
dbAdmin、dbOwner、userAdmin、clusterAdmin
clusterManager、clusterMonitor、hostManager
備份:
backup、restore
全局:
readAnyDatabase、readWriteAnyDatabase、
userAdminAnyDatabase、dbAdminAnyDatabase
超級(jí)用戶:
root
2.自定義角色
語(yǔ)法:
Use admin
dbCreateRole(
{
role:
Privileges:[
{resource:{db:
actions:[
],
Roles:[{role:
}
)
創(chuàng)建角色:
>use ycj
>db
>ycj
>db.createRole({role:'testycj',privileges:[{resource:{db:'ycj',collection:''},actions:['find','insert','re
move']}],roles:[{role:'read',db:'test'}]})
Error: Roles on the 'ycj' database cannot be granted roles from other databases(不能再其他數(shù)據(jù)庫(kù)下創(chuàng)建角色)
這個(gè)時(shí)候我們切到admin庫(kù)下,>use admin,創(chuàng)建用戶成功;因?yàn)槲覀儎?chuàng)建的角色是在admain下創(chuàng)建的。
> show users #查看db的用戶
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
查看admin的權(quán)限:
> show roles;
{
"role" : "readWriteAnyDatabase",
"db" : "admin",
"isBuiltin" : true,
"roles" : [ ],
"inheritedRoles" : [ ]
}
...........
...........
...........
{
"role" : "testycj",
"db" : "admin",
"isBuiltin" : false,
"roles" : [
{
"role" : "read",
"db" : "test"
}
],
"inheritedRoles" : [
{
"role" : "read",
"db" : "test"
}
]
}
{
"role" : "userAdmin",
"db" : "admin",
"isBuiltin" : true,
"roles" : [ ],
"inheritedRoles" : [ ]
}
可以看到我們的admin的root權(quán)限中,已經(jīng)存在我們傳教的testycj權(quán)限,同時(shí)我們也發(fā)現(xiàn)的root權(quán)限其實(shí)就是其他的權(quán)限的集合組成,比如readwrite、restore、readWriteAnyDatabase...,因?yàn)槲覀兪窃赼dmin下創(chuàng)建的權(quán)限,所有這個(gè)自定義權(quán)限的作用域就是admin,在其他域?qū)⒉荒苁褂谩?/p>
> db.runCommand({usersInfo:'admin',showPrivileges:1}) #查看這個(gè)用戶的所有信息·
{
"users" : [
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin", #在哪個(gè)庫(kù)創(chuàng)建的
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"inheritedRoles" : [ #繼承的角色
{
"role" : "root",
"db" : "admin"
}
],
"inheritedPrivileges" : [
{
"resource" : {
"cluster" : true #對(duì)集群操作需要權(quán)限
},
"actions" : [ #所操作的權(quán)限
"addShard",
"appendOplogNote",
"applicationMessage",
"authSchemaUpgrade",
"cleanupOrphaned",
"connPoolStats",
.......
.......
接下來(lái)我們就以yjctest權(quán)限去創(chuàng)建用戶,
>use admin
>db.createUser({user:'ycj',pwd:'123',roles:[{role:'testycj',db:'admin'}]})
>db.auth(‘ycj’,’123’)
>1
現(xiàn)在我們開啟兩個(gè)遠(yuǎn)程總段回話A和B來(lái)測(cè)試一下
A:ycj
B:admin
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。