最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分布式文檔存儲數(shù)據(jù)庫之MongoDB訪問控制的操作方法

 更新時間:2020年11月17日 09:08:13   作者:Linux-1874  
這篇文章主要介紹了分布式文檔存儲數(shù)據(jù)庫之MongoDB訪問控制的操作方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

  上一篇博客主要聊了下分布式文檔存儲數(shù)據(jù)庫之MongoDB備份與恢復(fù),回顧請參考http://m.fzitv.net/article/199845.htm;今天我們來了解下mongodb的訪問控制;

  什么是訪問控制?

  簡單講訪問控制就是指,哪些用戶可以訪問哪些資源,對資源有哪些操作(權(quán)限);在mongodb中我們把數(shù)據(jù)庫、或者集合叫做資源;也就說訪問控制是用來限制某些用戶對數(shù)據(jù)庫或集合的操作;我們在mysql數(shù)據(jù)庫中,我們通過給賬號授權(quán)的方式達(dá)到控制哪些用戶可以從哪些主機訪問數(shù)據(jù)庫,對數(shù)據(jù)庫有哪些操作;其中賬號由用戶名稱和主機地址構(gòu)成;在mongodb中采用的不是用戶+主機地址的方式,而是通過給用戶賦予一個或多個角色,這個角色或多個角色的所有權(quán)限就是這個用戶擁有的權(quán)限;默認(rèn)情況mongodb是沒有啟用訪問控制的,所以只要能夠連接上mongodb實例,我們就可以在其上做任何操作,在某種程度上,這是一種極為不安全的方式,為了杜絕這種不安全的訪問方式,我們需要對mongodb進(jìn)行訪問控制;

  mongodb中的角色權(quán)限說明

  mongodb默認(rèn)內(nèi)置了一些角色,不同的角色擁有不同的權(quán)限,如下圖

  查看mongodb中某個數(shù)據(jù)庫所有內(nèi)置角色

> db.runCommand({rolesInfo:1,showBuiltinRoles:true})
{
  "roles" : [
    {
      "role" : "dbAdmin",
      "db" : "test",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    },
    {
      "role" : "dbOwner",
      "db" : "test",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    },
    {
      "role" : "enableSharding",
      "db" : "test",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    },
    {
      "role" : "read",
      "db" : "test",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    },
    {
      "role" : "readWrite",
      "db" : "test",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    },
    {
      "role" : "userAdmin",
      "db" : "test",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    }
  ],
  "ok" : 1
}
>

  提示:以上是mongodb中test庫的默認(rèn)角色;如果要查看其它庫,我們需要切換到其他庫,然后運行上述命令查看即可;

  查詢當(dāng)前數(shù)據(jù)中的某個角色

> db
test
> db.runCommand({rolesInfo:"userAdmin"})
{
  "roles" : [
    {
      "role" : "userAdmin",
      "db" : "test",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    }
  ],
  "ok" : 1
}
>

  查詢其他數(shù)據(jù)庫中指定的角色權(quán)限

> db.runCommand({rolesInfo:{role:"userAdmin",db:"config"}})
{
  "roles" : [
    {
      "role" : "userAdmin",
      "db" : "config",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    }
  ],
  "ok" : 1
}
> db.runCommand({rolesInfo:{role:"root",db:"config"}})
{ "roles" : [ ], "ok" : 1 }
> db.runCommand({rolesInfo:{role:"root",db:"admin"}})
{
  "roles" : [
    {
      "role" : "root",
      "db" : "admin",
      "isBuiltin" : true,
      "roles" : [ ],
      "inheritedRoles" : [ ]
    }
  ],
  "ok" : 1
}
>

  創(chuàng)建一個用戶名為tom,其角色為超級管理員角色root

> use admin
switched to db admin
> db.createUser({user:"tom",pwd:"admin123.com",roles:[{"role":"root","db":"admin"}]})
Successfully added user: {
  "user" : "tom",
  "roles" : [
    {
      "role" : "root",
      "db" : "admin"
    }
  ]
}
>

  查看當(dāng)前庫用戶列表

> db
admin
> db.getUsers()
[
  {
    "_id" : "admin.tom",
    "userId" : UUID("67bf434a-49fc-4ed5-9e9b-23c443a2fc93"),
    "user" : "tom",
    "db" : "admin",
    "roles" : [
      {
        "role" : "root",
        "db" : "admin"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  }
]
>

  創(chuàng)建數(shù)據(jù)庫管理員用戶

> db.createUser({user:"jerry",pwd:"admin123.com",roles:["userAdminAnyDatabase"]})
Successfully added user: { "user" : "jerry", "roles" : [ "userAdminAnyDatabase" ] }
> db.getUsers()
[
  {
    "_id" : "admin.jerry",
    "userId" : UUID("5d0b77f2-b7f1-40cd-8149-f08b2e1e6a80"),
    "user" : "jerry",
    "db" : "admin",
    "roles" : [
      {
        "role" : "userAdminAnyDatabase",
        "db" : "admin"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  },
  {
    "_id" : "admin.tom",
    "userId" : UUID("67bf434a-49fc-4ed5-9e9b-23c443a2fc93"),
    "user" : "tom",
    "db" : "admin",
    "roles" : [
      {
        "role" : "root",
        "db" : "admin"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  }
]
>

  提示:如果創(chuàng)建用戶時,未指定db,則表示當(dāng)前該用戶對當(dāng)前所在db生效;

  刪除用戶

> db.dropUser("jerry")
true
> db.getUsers()
[
  {
    "_id" : "admin.tom",
    "userId" : UUID("67bf434a-49fc-4ed5-9e9b-23c443a2fc93"),
    "user" : "tom",
    "db" : "admin",
    "roles" : [
      {
        "role" : "root",
        "db" : "admin"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  }
]
>

  提示:刪除用戶,需切換到對應(yīng)數(shù)據(jù)下,指定對應(yīng)用戶名稱即可;在mongodb中用戶是對應(yīng)數(shù)據(jù)庫的,一個用戶可以對應(yīng)一個或多個數(shù)據(jù)庫,在指定數(shù)據(jù)庫刪除用戶,就表示刪除指定用戶對指定數(shù)據(jù)庫的訪問權(quán)限;

  修改指定用戶的密碼

> db
admin
> db.changeUserPassword("tom","123456")
>

  提示:修改用戶密碼,第一個是指定用戶的名稱,第二個是指定新密碼;

  驗證用戶名和密碼

  給錯誤的密碼

> db
admin
> db.auth("tom","admin")
Error: Authentication failed.
0
>

 給正確的密碼

> db
admin
> db.auth("tom","123456")
1
>

  創(chuàng)建一個普通用戶

> use testdb
switched to db testdb
> db.createUser({user:"test",pwd:"admin",roles:[{role:"readWrite",db:"testdb"}]})
Successfully added user: {
  "user" : "test",
  "roles" : [
    {
      "role" : "readWrite",
      "db" : "testdb"
    }
  ]
}
> db.getUsers()
[
  {
    "_id" : "testdb.test",
    "userId" : UUID("95ecb34c-46f4-44fa-8948-4f0875499d8e"),
    "user" : "test",
    "db" : "testdb",
    "roles" : [
      {
        "role" : "readWrite",
        "db" : "testdb"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  }
]
>

 提示:以上就創(chuàng)建了一個名為test的用戶,它可對testdb這個庫下的所有collection做讀寫操作;

  創(chuàng)建一個多角色的用戶

> db
testdb
> db.createUser(
... {
... user:"jerry1",
... pwd:"admin123.com",
... roles:[
... {role:"clusterAdmin",db:"admin"},
... {role:"readWrite",db:"testdb"},
... {role:"read",db:"testdb1"}
... ]
... })
Successfully added user: {
  "user" : "jerry1",
  "roles" : [
    {
      "role" : "clusterAdmin",
      "db" : "admin"
    },
    {
      "role" : "readWrite",
      "db" : "testdb"
    },
    {
      "role" : "read",
      "db" : "testdb1"
    }
  ]
}
> db.getUsers()
[
  {
    "_id" : "testdb.jerry1",
    "userId" : UUID("43d66bf8-1e3a-4c14-ad73-5961b5a7660f"),
    "user" : "jerry1",
    "db" : "testdb",
    "roles" : [
      {
        "role" : "clusterAdmin",
        "db" : "admin"
      },
      {
        "role" : "readWrite",
        "db" : "testdb"
      },
      {
        "role" : "read",
        "db" : "testdb1"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  },
  {
    "_id" : "testdb.test",
    "userId" : UUID("95ecb34c-46f4-44fa-8948-4f0875499d8e"),
    "user" : "test",
    "db" : "testdb",
    "roles" : [
      {
        "role" : "readWrite",
        "db" : "testdb"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  }
]
>

  提示:在mongodb中一個用戶可以授權(quán)擁有多個角色權(quán)限;

  開啟mongodb服務(wù)端訪問控制配置

  重啟服務(wù)

[root@node12 ~]# systemctl restart mongod.service
[root@node12 ~]# ss -tnl
State  Recv-Q Send-Q   Local Address:Port      Peer Address:Port    
LISTEN  0  128      *:22          *:*     
LISTEN  0  100    127.0.0.1:25          *:*     
LISTEN  0  128      *:27017         *:*     
LISTEN  0  128      :::22         :::*     
LISTEN  0  100      ::1:25         :::*     
[root@node12 ~]#

  測試:現(xiàn)在連接mongodb,看看會發(fā)生什么?

[root@node12 ~]# mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("68fa2f83-64a4-42c2-8d64-9ee73a77e883") }
MongoDB server version: 4.4.1
> show dbs
> db
test
> show tables
Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
>

  提示:現(xiàn)在我們直接連接mongodb是可以正常連接,但是我們沒法查看數(shù)據(jù)列表以及collections了;這個時候我們就需要進(jìn)行用戶認(rèn)證了;

  認(rèn)證用戶

> db
test
> db.auth("test","admin")
Error: Authentication failed.
0
> use testdb
switched to db testdb
> db.auth("test","admin")
1
> show dbs
> show collections
>

  提示:認(rèn)證用戶必須切換到對應(yīng)的數(shù)據(jù)庫下做認(rèn)證;我這里test用戶只能對testdb庫下的所有collection進(jìn)行讀寫,所以認(rèn)證以后,我們在使用 show dbs命令就看不到系統(tǒng)admin和config庫了;除了上述連接數(shù)據(jù)庫以后使用db.auth()做用戶認(rèn)證,我們也可直接在連接數(shù)據(jù)庫時指定用戶名和密碼,如下

[root@node12 ~]# mongo -utest -padmin testdb
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/testdb?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("60c43e94-04c6-46f4-be07-07ca8fa06b2f") }
MongoDB server version: 4.4.1
> show dbs
> exit
bye
[root@node12 ~]# mongo -utest -padmin 192.168.0.52:27017/testdb
MongoDB shell version v4.4.1
connecting to: mongodb://192.168.0.52:27017/testdb?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a30dbd64-7b59-4a8e-b95d-02ff30e256f3") }
MongoDB server version: 4.4.1
> show dbs
> show tables
>

  以上就是在mongodb中開啟訪問控制,創(chuàng)建用戶,授權(quán)的操作;我們只需要在配置文件中指定開啟認(rèn)證功能,然后使用具有創(chuàng)建用戶權(quán)限的用戶登錄數(shù)據(jù)庫創(chuàng)建用戶授權(quán)即可;

到此這篇關(guān)于分布式文檔存儲數(shù)據(jù)庫之MongoDB訪問控制的操作方法的文章就介紹到這了,更多相關(guān)MongoDB訪問控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MongoDB中游標(biāo)的深入學(xué)習(xí)

    MongoDB中游標(biāo)的深入學(xué)習(xí)

    MongoDB中find()函數(shù)返回一個游標(biāo),客戶端通過對游標(biāo)進(jìn)行一些設(shè)置就能對查詢結(jié)果進(jìn)行有效地控制,如可以限制查詢得到的結(jié)果數(shù)量、跳過部分結(jié)果、或?qū)Y(jié)果集按任意鍵進(jìn)行排序等!這篇文章主要介紹了MongoDB中的游標(biāo),有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • MongoDB??數(shù)據(jù)模型的設(shè)計模式及優(yōu)缺點

    MongoDB??數(shù)據(jù)模型的設(shè)計模式及優(yōu)缺點

    這篇文章主要介紹了MongoDB??數(shù)據(jù)模型的設(shè)計模式,在實際開發(fā)中,大多數(shù)性能問題都可以追溯到糟糕的模型設(shè)計,官方也提供分享過文檔模型設(shè)計的進(jìn)階技巧,這里簡單翻譯記錄一下,需要的朋友可以參考下
    2022-12-12
  • Mongo DB增刪改查命令

    Mongo DB增刪改查命令

    本文給大家匯總介紹了一下Mongo DB數(shù)據(jù)庫的增刪改查命令以及部分的示例,有需要的小伙伴可以參考下,希望對大家學(xué)習(xí)Mongo DB能夠有所幫助
    2016-12-12
  • mongodb?數(shù)據(jù)塊的遷移流程分析

    mongodb?數(shù)據(jù)塊的遷移流程分析

    這篇文章主要介紹了mongodb?數(shù)據(jù)塊的遷移流程介紹,包括數(shù)據(jù)塊遷移對集群性能的影響,建議設(shè)置平衡器的活躍時間窗口,設(shè)置為業(yè)務(wù)低估時進(jìn)行,具體操作步驟文中有介紹,需要的朋友可以參考下
    2022-04-04
  • MongoDB中的Primary Shard詳解

    MongoDB中的Primary Shard詳解

    在MongoDB的Sharding架構(gòu)中,每個database中都可以存儲兩種類型的集合,一種是未分片的集合,一種是通過分片鍵,被打散的集合,下面給大家介紹MongoDB中的Primary Shard詳解,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Spark整合Mongodb的方法

    Spark整合Mongodb的方法

    Spark 是一個通用,快速,適用于大規(guī)模數(shù)據(jù)的處理引擎。接下來通過本文給大家分享Spark整合Mongodb的方法,感興趣的朋友一起看看吧
    2017-11-11
  • MongoDB利用oplog恢復(fù)數(shù)據(jù)的方法

    MongoDB利用oplog恢復(fù)數(shù)據(jù)的方法

    這篇文章主要介紹了MongoDB利用oplog恢復(fù)數(shù)據(jù)的方法,當(dāng)我們對數(shù)據(jù)出現(xiàn)誤操作的時候,可以利用oplog恢復(fù)數(shù)據(jù),下文操作過程需要的小伙伴可以參考一下
    2022-04-04
  • 詳解MongoDB的條件查詢和排序

    詳解MongoDB的條件查詢和排序

    MongoDB 提供了豐富的查詢功能,包括條件組合、反向查詢、查詢結(jié)果過濾、排序等,借助 MongoDB 多樣化的查詢方式,可以完成業(yè)務(wù)上的各類查詢需要。
    2021-06-06
  • MongoDB實現(xiàn)創(chuàng)建刪除數(shù)據(jù)庫、創(chuàng)建刪除表(集合 )、數(shù)據(jù)增刪改查

    MongoDB實現(xiàn)創(chuàng)建刪除數(shù)據(jù)庫、創(chuàng)建刪除表(集合 )、數(shù)據(jù)增刪改查

    這篇文章介紹了MongoDB實現(xiàn)創(chuàng)建刪除數(shù)據(jù)庫、創(chuàng)建刪除表(集合 )、數(shù)據(jù)增刪改查的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Linux下MongoDB數(shù)據(jù)庫實現(xiàn)自動備份詳解

    Linux下MongoDB數(shù)據(jù)庫實現(xiàn)自動備份詳解

    這篇文章主要給大家介紹了在Linux系統(tǒng)下下MongoDB數(shù)據(jù)庫實現(xiàn)自動備份的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06

最新評論

突泉县| 沾益县| 清远市| 平昌县| 边坝县| 灵川县| 岳西县| 许昌县| 沂源县| 库尔勒市| 铁岭市| 施甸县| 沈阳市| 隆林| 望城县| 西充县| 凯里市| 安庆市| 富顺县| 葵青区| 南开区| 孙吴县| 屏南县| 寿光市| 章丘市| 永州市| 隆回县| 田林县| 永定县| 白城市| 康乐县| 双柏县| 南漳县| 江西省| 丹棱县| 综艺| 定边县| 绥阳县| 隆子县| 玉环县| 寿阳县|