您好,登錄后才能下訂單哦!
Mongodb權限管理
版本:Mongodb3.0
說到對數據庫我安全問題我們一般就會從以下幾點考慮怎么去解決數據庫安全的問題。
1.最安全的是物理隔離:
2.網絡隔離:
3.防火墻隔離:
4.用戶名和密碼:
下面我們來說說mongodb的用戶名和密碼認證:
認證是確定client身份的機制,默認情況下mongodb并沒有開啟權限認證,我們部署好MGDB之后需要進行,一般常用mongodb權限認證的方式有:
1.auth開啟(在啟動的時候知道--auth=true)
2.Keyfile開啟
怎么進行認證,在命令行mongo --auth或者在配置文件里加入配置信息,來開啟認證;auth是一個布爾值,只需要在配置文件里加入auth=ture就開啟認證了,那Keyfile呢?
Auth和keyfile的區別:
Auth : 單機實例認證,
Keyfile : 副本集和分片之間驗證;
復制集是一個整體,復制集之間通信需要驗證對方的身份,因為沒有Keyfile,所以節點之間是不知道其他節點,Keyfile是集群節點間的一個×××明,怎么去創建keyfile,我們可以去使用openssl命令;
[root@localhost ~]# openssl rand -base64 111 .keyFile
[root@localhost ~]# cat .keyFile
EG8ABQZU9C87lPRKFVbClBYhxTw8Hyv91NkOoqLBF3eRfnAUxPCTcevB82fYM+Zo+tPOjnsPiVZrCZmAsG26ZFrB/SHhTj/E+F3QARFWKnm4DJNBhzLnjZOKtoao61BMcRAye0H7HG0geMQtbGBX
在未開啟keyfile認證的時候不去創建用戶,否則也會當keyfile配置重啟后,用戶創建可能進行回滾,當我們進行創建完成keyfile后再進行認證創建用戶;
Keyfile的注意:
1.內容 base64編碼集【a-z A-Z + /】
2.長度 1000bytes
3.權限 chmod 600 keyfile
現在我們開始傳教
創建用戶
語法;
db.createUser(
{
User:<name_string>, #字符串
pwd:<password_string> #字符串
Roles:<role:<role_name>,db:<db_name>> #數組+對象
}
)
創建root用戶,在創建之前我們開啟的auth認證,但是庫沒有任何用戶,那我們需要添加參數setParametmer=enableLocalhostAuthBypass=1,來跳過認證情況下本機登錄無需認證。
創建root用戶的時候,是一個全局用戶,必須只能創建在admin庫
> 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", #你這個用戶是創建在admin庫
"roles" : [
{
"role" : "root",
"db" : "admin" #角色的作用域
}
]
}
> db.auth('admin','123123') #認證
>1 #認證成功
刪除用戶:
1、db.dropUser(<user_name>) 刪除某個用戶,
2、db.dropAllUser() 刪除所有用戶,
如何修改用戶密碼:
角色:
什么是角色:對某一個資源的權限的集合
mongodb有什么角色:
MongoBD有兩種角色
1.自帶 的角色(bulid-in roles)
讀寫:
read 、readWrite
管理員:
dbAdmin、dbOwner、userAdmin、clusterAdmin
clusterManager、clusterMonitor、hostManager
備份:
backup、restore
全局:
readAnyDatabase、readWriteAnyDatabase、
userAdminAnyDatabase、dbAdminAnyDatabase
超級用戶:
root
2.自定義角色
語法:
Use admin
dbCreateRole(
{
role:<role_name>, #角色名字
Privileges:[
{resource:{db:<db_name>,collection:<coll_name>},
actions:[<action_name>]} #操作的力度很小。不同的操作對應不同的命令
],
Roles:[{role:<role_name>},db:<db_name>] #你所創建的角色是否需要繼承其他的role
}
)
創建角色:
>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(不能再其他數據庫下創建角色)
這個時候我們切到admin庫下,>use admin,創建用戶成功;因為我們創建的角色是在admain下創建的。
> show users #查看db的用戶
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
查看admin的權限:
> 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權限中,已經存在我們傳教的testycj權限,同時我們也發現的root權限其實就是其他的權限的集合組成,比如readwrite、restore、readWriteAnyDatabase...,因為我們是在admin下創建的權限,所有這個自定義權限的作用域就是admin,在其他域將不能使用。
> db.runCommand({usersInfo:'admin',showPrivileges:1}) #查看這個用戶的所有信息·
{
"users" : [
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin", #在哪個庫創建的
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"inheritedRoles" : [ #繼承的角色
{
"role" : "root",
"db" : "admin"
}
],
"inheritedPrivileges" : [
{
"resource" : {
"cluster" : true #對集群操作需要權限
},
"actions" : [ #所操作的權限
"addShard",
"appendOplogNote",
"applicationMessage",
"authSchemaUpgrade",
"cleanupOrphaned",
"connPoolStats",
.......
.......
接下來我們就以yjctest權限去創建用戶,
>use admin
>db.createUser({user:'ycj',pwd:'123',roles:[{role:'testycj',db:'admin'}]})
>db.auth(‘ycj’,’123’)
>1
現在我們開啟兩個遠程總段回話A和B來測試一下
A:ycj
B:admin
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。