您好,登錄后才能下訂單哦!
Mongodb權(quán)限管理
版本:Mongodb3.0
說到對(duì)數(shù)據(jù)庫(kù)我安全問題我們一般就會(huì)從以下幾點(diǎn)考慮怎么去解決數(shù)據(jù)庫(kù)安全的問題。
1.最安全的是物理隔離:
2.網(wǎng)絡(luò)隔離:
3.防火墻隔離:
4.用戶名和密碼:
下面我們來(lái)說說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:<name_string>, #字符串
pwd:<password_string> #字符串
Roles:<role:<role_name>,db:<db_name>> #數(shù)組+對(duì)象
}
)
創(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(<user_name>) 刪除某個(gè)用戶,
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:<role_name>, #角色名字
Privileges:[
{resource:{db:<db_name>,collection:<coll_name>},
actions:[<action_name>]} #操作的力度很小。不同的操作對(duì)應(yīng)不同的命令
],
Roles:[{role:<role_name>},db:<db_name>] #你所創(chuàng)建的角色是否需要繼承其他的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)槲覀兪窃?/span>admin下創(chuàng)建的權(quán)限,所有這個(gè)自定義權(quán)限的作用域就是admin,在其他域?qū)⒉荒苁褂谩?/span>
> 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
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。