MongoDB初探系列之三:MongoDB使用者權限操作,mongodb初探

來源:互聯網
上載者:User

MongoDB初探系列之三:MongoDB使用者權限操作,mongodb初探

經過初探一的配置和初探二的基本瞭解,下面將在初探三中介紹一下MongoDB的使用者權限操作。

一點點簡介:

和其他所有資料庫一樣,許可權的管理都差不多一樣。mongodb儲存所有的使用者資訊在admin 資料庫的集合system.users中,儲存使用者名稱、密碼和資料庫資訊。mongodb預設不啟用授權認證,只要能串連到該伺服器,就可串連到mongod。若要啟用安全認證,需要更改設定檔參數auth。

1.查看當前MongoDB下面都已經存在了哪些資料庫

show dbs 
顯示結果如下:


由於我本地已經存在了admin庫,因此可以直接學習下面的內容。如果各位小夥伴安裝好MongoDB後沒有

發現admin庫,那麼可以使用下面的命令來建立admin庫並建立一個admin使用者,後續我們會用到。

 use admin     db.createUser(    {      user: "admin",      pwd: "admin",      roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]    }  )  

2、進入admin庫,我們來查看一下它都包含哪些東西


進入後我們發現他包含索引,使用者和版本號碼三個集合。

3、分別執行集合的find命令,來查看一下這三個集合裡面的資料。【註:這裡的集合相當於我們平時用的資料庫的表】

> db.system.users.find();{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "DDWOrIFkjoeF7mFGNOgsMA==", "storedKey" : "Q7JLL0AziNLBtngVJYglQ+lZRvE=", "serverKey" : "qRC3s0HCrmIw2My5s0zAmHQUzvM=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}> db.system.indexes.find();{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.version" }{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.users" }{ "v" : 1, "unique" : true, "key" : { "user" : 1, "db" : 1 }, "name" : "user_1_db_1", "ns" : "admin.system.users" }> db.system.version.find();{ "_id" : "authSchema", "currentVersion" : 5 }

4、現在啟用 auth

編輯我們在初探一中的寫的設定檔mongo.config,然後在最下面加入這麼一行。

auth=true 

現在我們來重啟Mongod服務,此時我們會發現我們沒有許可權訪問了,如所示:


剛才在admin庫中建立了一個賬戶 admin ,先來串連admin庫(其他db則失敗):

> db.auth("admin","admin");Error: 18 Authentication failed.0> use admin;switched to db admin> db.auth("admin","admin");1

0:代表授權失敗 1:代表授權成功


為了驗證沒有授權不能查看對應的集合,我們將庫切換至test庫,然後執行show collections 命令,結果如下。

事實證明開啟了許可權認證以後,則必須擁有授權才能訪問對應庫的相應集合。

> use testswitched to db test> show collections;2015-07-19T15:51:59.069+0800 E QUERY    Error: listCollections failed: {        "ok" : 0,        "errmsg" : "not authorized on test to execute command { listCollections: 1.0 }",        "code" : 13}    at Error (<anonymous>)    at DB._getCollectionInfosCommand (src/mongo/shell/db.js:646:15)    at DB.getCollectionInfos (src/mongo/shell/db.js:658:20)    at DB.getCollectionNames (src/mongo/shell/db.js:669:17)    at shellHelper.show (src/mongo/shell/utils.js:625:12)    at shellHelper (src/mongo/shell/utils.js:524:36)    at (shellhelp2):1:1 at src/mongo/shell/db.js:646

5、對於建立的相關使用者進行角色授權

角色授權分兩種,一種是直接在當前庫中建立使用者並授予相關許可權。如admin庫中建立admin使用者。另一種情況是

將在admin中建立的使用者授予操作其他庫的許可權,相關授權命令如下:

#授予角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ])  #取消角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ]) 
下面我們在admin庫中執行以下命令:

 db.grantRolesToUser( "admin" , [ { role: "dbOwner", db: "test" } ]) ;

然後我們切換到test庫,我們驚奇的發現此時admin使用者也能執行show collections 命令了。

注意:

通過db.auth("admin","admin") 命令登陸,只能登陸包含這個使用者的庫。但是成功登陸之後,如果目前使用者擁有

訪問其他庫的許可權,可以直接切換到對應的庫,執行相關的資料操作命令。

因此,為了方便起見,還是建議每個庫在建立的時候,直接在當前庫中建立好使用的使用者,這樣就不用來回切換了。

6、建立自訂角色,並對角色進行授權

#建立角色並授權db.createRole({    role: "testRole",   privileges: [{ resource: { db: "mydb", collection: "" }, actions: [ "find" ] }],   roles: []  })  #添加Privileges給角色  db.grantPrivilegesToRole("testRole",   [{ resource: { db: "mydb", collection: "" },actions: [ "update", "insert", "remove" ]}  ])  

#更改角色 roles,把roles值全部更新。同樣Privileges也可以更新替換db.updateRole("testRole",{ roles:[{ role: "readWrite",db: "mydb"}]},{ w:"majority" })  

關於角色,參考官方文檔提取總結如下:

角色分類

角色

許可權及角色

(本文大小寫可能有些變化,使用時請參考官方文檔)

Database User Roles

read

CollStats,dbHash,dbStats,find,killCursors,listIndexes,listCollections

readWrite

CollStats,ConvertToCapped,CreateCollection,DbHash,DbStats,

DropCollection,CreateIndex,DropIndex,Emptycapped,Find,

Insert,KillCursors,ListIndexes,ListCollections,Remove,

RenameCollectionSameDB,update

Database Administration Roles

dbAdmin

collStats,dbHash,dbStats,find,killCursors,listIndexes,listCollections,

dropCollection 和 createCollection 在 system.profile

dbOwner

角色:readWrite, dbAdmin,userAdmin

userAdmin

ChangeCustomData,ChangePassword,CreateRole,CreateUser,

DropRole,DropUser,GrantRole,RevokeRole,ViewRole,viewUser

Cluster Administration Roles

clusterAdmin

角色:clusterManager, clusterMonitor, hostManager

clusterManager

AddShard,ApplicationMessage,CleanupOrphaned,FlushRouterConfig,

ListShards,RemoveShard,ReplSetConfigure,ReplSetGetStatus,

ReplSetStateChange,Resync,

 

EnableSharding,MoveChunk,SplitChunk,splitVector

clusterMonitor

connPoolStats,cursorInfo,getCmdLineOpts,getLog,getParameter,

getShardMap,hostInfo,inprog,listDatabases,listShards,netstat,

replSetGetStatus,serverStatus,shardingState,top

 

collStats,dbStats,getShardVersion

hostManager

applicationMessage,closeAllDatabases,connPoolSync,cpuProfiler,

diagLogging,flushRouterConfig,fsync,invalidateUserCache,killop,

logRotate,resync,setParameter,shutdown,touch,unlock

Backup and Restoration Roles

backup

提供在admin資料庫mms.backup文檔中insert,update許可權

列出所有資料庫:listDatabases

列出所有集合索引:listIndexes

 

對以下提供查詢操作:find

*非系統集合

*系統集合:system.indexes, system.namespaces, system.js

*集合:admin.system.users 和 admin.system.roles

restore

非系統集合、system.js,admin.system.users 和 admin.system.roles 及2.6 版本的system.users提供以下許可權:

collMod,createCollection,createIndex,dropCollection,insert

 

列出所有資料庫:listDatabases

system.users :find,remove,update

All-Database Roles

readAnyDatabase

提供所有資料庫中唯讀許可權:read

列出叢集所有資料庫:listDatabases

readWriteAnyDatabase

提供所有資料庫讀寫權限:readWrite

列出叢集所有資料庫:listDatabases

userAdminAnyDatabase

提供所有使用者資料管理許可權:userAdmin

Cluster:authSchemaUpgrade,invalidateUserCache,listDatabases

admin.system.users和admin.system.roles:

collStats,dbHash,dbStats,find,killCursors,planCacheRead

createIndex,dropIndex

dbAdminAnyDatabase

提供所有資料庫管理員許可權:dbAdmin

列出叢集所有資料庫:listDatabases

Superuser Roles

root

角色:dbOwner,userAdmin,userAdminAnyDatabase

readWriteAnyDatabase, dbAdminAnyDatabase,

userAdminAnyDatabase,clusterAdmin

Internal Role

__system

叢集中對任何資料庫採取任何操作


OK ,至此簡單的許可權操作已經介紹完畢。初探四中將介紹一下MongoDB與JDBC的聯合使用。

著作權聲明:轉載請註明博文地址,尊重作者勞動成果。歡迎關注http://blog.csdn.net/zgs_shmily,一起成長。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.