MongoDB3.0+的權限,網上搜出來的解決方法都是3.0如下的版本的,因此不適合3.0+以上的版本,因爲這版本改變的有些大,解決了好久,終於解決,下面把解決的步驟以及思路分享給你們。linux
一,不使用 --authmongodb
1.首先,不使用--auth參數啓動MongoDB:shell
./mongod -config /opt/mongodb/conf/mongodb.conf
2.接着,在命令窗口中輸入:數據庫
show dbs
看到只有一個local數據庫,admin是不存在的(這是3.0以上版本改變了的),咱們須要本身給他建立個admin數據庫函數
3.打開 mongo shell:code
./mongo 192.168.31.101:27017/admin
4.添加管理用戶server
use admin db.createUser( { user: "admin", pwd: "admin", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
roles 中的 db 參數是必須的,否則會報錯:Error: couldn’t add user: Missing expected field 「db」。另外,有不少文章記錄的是使用 db.addUser(…) 方法,這個方法是舊版的,3.0中已經不存在xml
5.切換到admin下,查看剛纔建立的用戶:索引
show users 或 db.system.users.find()
{ "_id" : "admin.buru", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "gwVwuA/dXvxgSHavEnlyvA==", "storedKey" : "l2QEVTEujpkCuqDEKqfIWbSv4ms=", "serverKey" : "
怎麼關閉 mongoDB?千萬不要 kill -9 pid,能夠 kill -2 pid 或 db.shutdownServer()get
二,使用--auth
1.使用--auth參數啓動MongoDB:
./mongod --auth -f /opt/mongodb/conf/mongodb.conf
2.再次打開 mongo shell:
./mongodb-linux-i686-3.0.0/bin/mongo use admin db.auth("admin","admin") #認證,返回1表示成功 或 ./mongodb-linux-i686-3.0.0/bin/mongo -u admin -p admin --authenticationDatabase admin
此時
show collections
報錯
2017-10-17T10:15:56.011+0800 EQUERYError: listCollections failed: { "ok" : 0, "errmsg" : "not authorized on admin to execute command { listCollections: 1.0 }", "code" : 13 } at Error (<anonymous>) at DB._getCollectionInfosCommand (src/mongo/shell/db.js:643:15) at DB.getCollectionInfos (src/mongo/shell/db.js:655:20) at DB.getCollectionNames (src/mongo/shell/db.js:666: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:643
由於,用戶admin只有用戶管理的權限
3.下面建立用戶,用戶都跟着庫走,建立的用戶都是
use test db.createUser( { user: "test1", pwd: "test1", roles: [ { role: "readWrite", db: "test" } ] } )
4.查看剛剛建立的用戶
show users
{ "_id" : "test.test1", "user" : "test1", "db" : "test", "roles" : [ { "role" : "readWrite", "db" : "test" } ] }
5.查看整個mongoDB所有的用戶:
use admin db.system.users.find()
use admin db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "gwVwuA/dXvxgSHavEnlyvA==", "storedKey" : "l2QEVTEujpkCuqDEKqfIWbSv4ms=", "serverKey" : "M1ofNKXg2sNCsFrBJbX4pXbSgvg=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } { "_id" : "test.test1", "user" : "test1", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "//xy1V1fbqEHC1gzQqZHGQ==", "storedKey" : "ZS/o54zzl/FdcXLQJ98KdAVTfF0=", "serverKey" : "iIpNYz2Gk8KhyK3zgz6muBt0PI4=" } }, "roles" : [ { "role" : "readWrite", "db" : "test" } ] }
6.建立完畢,驗證一下:
use admin show collections
2017-10-17T10:30:06.461+0800 EQUERYError: listCollections failed: { "ok" : 0, "errmsg" : "not authorized on buru to execute command { listCollections: 1.0 }", "code" : 13 } at Error (<anonymous>) at DB._getCollectionInfosCommand (src/mongo/shell/db.js:643:15) at DB.getCollectionInfos (src/mongo/shell/db.js:655:20) at DB.getCollectionNames (src/mongo/shell/db.js:666: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:643
7.顯然沒權限,先auth:
db.auth("test1","test1") 1 show collections news system.indexes
完畢!
注意:
Read:容許用戶讀取指定數據庫 readWrite:容許用戶讀寫指定數據庫 backup,retore:在進行備份、恢復時能夠單獨指定的角色,在db.createUser()方法中roles裏面的db必須寫成是admin庫,要否則會 報錯 dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶 clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。 readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限 readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限 userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限, dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。 root:只在admin數據庫中可用。超級帳號,超級權限