摘要 MongoDB3.x與之前的版本有很大區別,這里簡單介紹一下用戶身份驗證相關內容。
1. 了解3.x版本添加用戶的函數 函數:
db.createUser(user,writeConcern);
參數: user這個文檔關于用戶身份認證和訪問的相關信息; writeConcern這個文檔描述MongoDB提供寫操作的相關信息。
user 文檔提供的格式: { user: “”, pwd: “”, customData: { }, roles: [ { role: “”, db: “” } | “”, … ]
user 文檔字段介紹: user:用戶名 pwd:密碼 roles:指定用戶的角色,可以用一個空數組給新用戶設定空角色; 在roles字段,可以指定內置角色和用戶定義的角色。
role里的角色可以選:
Built-In Roles(內置角色): 1. 數據庫用戶角色:read、readWrite; 2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin; 3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 4. 備份恢復角色:backup、restore; 5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 6. 超級用戶角色:root // 這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase) 7. 內部角色:__system
角色釋義:
Read:允許用戶讀取指定數據庫 readWrite:允許用戶讀寫指定數據庫 dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.PRofile userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶 clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。 readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限 readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限 userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限 dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。 root:只在admin數據庫中可用。超級賬號,超級權限
2.添加用戶
在安裝MongoDB完成后,啟動未啟用安全檢查的MongoDB服務,進入查看數據庫,只有一個local庫,admin庫是不存在的?,F在創建一個擁有授權權限的帳號,su,這里注意一下在哪個庫下創建的用戶必須要在那個庫下去驗證(auth)。MongoDB shell version: 3.2.3connecting to: test> use adminswitched to db admin> db.createUser({user:"su",pwd:"su", roles: [{ role: "userAdminAnyDatabase", db: "admin" }]});Successfully added user: { "user" : "su", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}
12345678910111213141234567891011121314上面創建一個擁有 userAdminAnyDatabase 角色,用來管理用戶的用戶,可以通過這個角色來創建、刪除用戶。驗證時需要重新啟動MongoDB服務,加上–auth參數。
>mongod --auth ## 重啟MongoDB服務11重新登錄:
MongoDB shell version: 3.2.3connecting to: test> show dbs; ## 這里因為沒有驗證,導致訪問失敗2016-04-27T14:34:44.573+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13} :_getErrorWithCode@src/mongo/shell/utils.js:23:13Mongo.prototype.getDBs@src/mongo/shell/mongo.js:53:1shellHelper.show@src/mongo/shell/utils.js:700:19shellHelper@src/mongo/shell/utils.js:594:15@(shellhelp2):1:1>123456789101112131415123456789101112131415因為在admin創建的用戶,在test下驗證所以失敗了
新聞熱點
疑難解答