溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mongodb七天總結(jié)—權(quán)限管理(2)

發(fā)布時(shí)間:2020-05-28 03:18:28 來(lái)源:網(wǎng)絡(luò) 閱讀:1385 作者:地下舍 欄目:MongoDB數(shù)據(jù)庫(kù)

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)證成功

 

刪除用戶:

 

1db.dropUser(<user_name>)  刪除某個(gè)用戶,

2、db.dropAllUser()           刪除所有用戶,

如何修改用戶密碼:

 

 

角色:

什么是角色:對(duì)某一個(gè)資源的權(quán)限的集合

mongodb有什么角色:

MongoBD有兩種角色

1.自帶 的角色(bulid-in roles

  讀寫:

read 、readWrite

  管理員:

dbAdmin、dbOwner、userAdminclusterAdmin

clusterManager、clusterMonitor、hostManager

  備份:

        backuprestore

  全局:

readAnyDatabase、readWriteAnyDatabase、

userAdminAnyDatabasedbAdminAnyDatabase

  超級(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" : [ ]

}

可以看到我們的adminroot權(quán)限中,已經(jīng)存在我們傳教的testycj權(quán)限,同時(shí)我們也發(fā)現(xiàn)的root權(quán)限其實(shí)就是其他的權(quán)限的集合組成,比如readwriterestore、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)程總段回話AB來(lái)測(cè)試一下

Aycj

Badmin


 

 

 


向AI問一下細(xì)節(jié)

免責(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)容。

AI