一、MongoDB中內置角色
角色 | 介紹 |
read | 提供讀取所有非系統的集合(數據庫) |
readWrite | 提供讀寫所有非系統的集合(數據庫)和讀取所有角色的所有權限 |
dbAdmin | 提供執行管理任務的功能,例如與架構相關的任務,索引編制,收集統計信息。此角色不授予用戶和角色管理權限。 |
dbOwner | 提供對數據庫執行任何管理操作的功能。此角色組合了readWrite,dbAdmin和userAdmin角色授予的權限。 |
userAdmin | 提供在當前數據庫上創建和修改角色和用戶的功能。由於userAdmin角色允許用戶向任何用戶(包括他們自己)授予任何權限,因此該角色還間接提供對數據庫的超級用戶訪問權限,或者,如果作用於管理數據庫,則提供對群集的訪問權限。 |
clusterAdmin | 提供最佳的集群管理訪問。此角色組合了clusterManager,clusterMonitor和hostManager角色授予的權限。此外,該角色還提供了dropDatabase操作。 |
readAnyDatabase | 僅在admin 數據庫中使用,提供所有數據庫的讀權限。 |
readWriteAnyDatabase | 盡在admin 數據庫中使用,提供所有數據庫的讀寫權限 |
userAdminAnyDatabase | 盡在admin 數據庫中使用,提供與userAdmin相同的用戶管理操作訪問權限,允許用戶向任何用戶(包括他們自己)授予任何權限,因此該角色還間接提供超級用戶訪問權限。 |
dbAdminAnyDatabase | 僅在admin 數據庫中使用,提供與dbAdmin相同的數據庫管理操作訪問權限,該角色還在整個群集上提供listDatabases操作。 |
root | 盡在admin 數據庫中使用,提供超級權限 |
二、創建管理員用戶
創建管理員
連接mongodb
mongo --host 10.10.18.11
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } )
創建管理員賬號:myUserAdmin 密碼:abc123
查看創建的管理員賬號
use admin
db.getUser("myUserAdmin")
重啟MongoDB實例
連接MongoDB
1、類似Mysql一樣連接
mongo --host 10.10.18.11 -u "myUserAdmin" --authenticationDatabase "admin" -p'abc123'
結果:
1 MongoDB shell version v4.0.10 2 connecting to: mongodb://10.10.18.11:27017/?authSource=admin&gssapiServiceName=mongodb 3 Implicit session: session { "id" : UUID("3b067347-1b0e-4761-9399-cb3ad4ba6c93") } 4 MongoDB server version: 4.0.10
2、登錄后進行驗證
連接mongodb
mongo --host 10.10.18.11
進行驗證
rs0:PRIMARY> use admin switched to db admin rs0:PRIMARY> db.auth("myUserAdmin", "abc123" ) 1
三、創建普通用戶
創建一個普通用戶
用戶名:myTester
密碼:xyz123
權限:讀寫數據庫 test, 只讀數據庫 reporting。
use test db.createUser( { user: "myTester", pwd: "xyz123", roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )
普通用戶連接MongoDB實例
mongo --host 10.10.18.11 -u "myTester" --authenticationDatabase "test" -p'xyz123'
結果:
1 MongoDB shell version v4.0.10 2 connecting to: mongodb://10.10.18.11:27017/?authSource=test&gssapiServiceName=mongodb 3 Implicit session: session { "id" : UUID("3e9011ee-729f-4112-acd1-f5d1515490ac") } 4 MongoDB server version: 4.0.10
驗證權限
在test集合中插入、查詢數據
rs0:PRIMARY> db.test.insertOne({name:"sue",age:19,status:'p'}) { "acknowledged" : true, "insertedId" : ObjectId("5d00b364a75d40ae9b83c64c") } rs0:PRIMARY> db.test.find({name:"sue"}) { "_id" : ObjectId("5d00b364a75d40ae9b83c64c"), "name" : "sue", "age" : 19, "status" : "p" }