为了兼用2.6版本,我直接指定下面的参数:
setParameter: authenticationMechanisms:MONGODB-CR
下面看看如何创建访问控制权限
不使用 —auth 参数,启动 mongoDB
mongodb-linux-i686-3.0.0/bin/mongod-fmongodb-linux-i686-3.0.0/mongodb.conf
此时你 show dbs 会看到只有一个local数据库,那个所谓的admin是不存在的。
mongoDB 没有超级无敌用户root,只有能管理用户的用户 userAdminAnyDatabase。
添加管理用户useadmin db.createUser( { user:"buru", pwd:"12345678", roles:[{role:"userAdminAnyDatabase",db:"admin"}] } )
roles 中的 db 参数是必须的,不然会报错:Error: couldn’t add user: Missing expected field “db”。另外,有很多文章记录的是使用 db.addUser(…) 方法,这个方法是旧版的,3.0中已经不存在,详见:。
切换到admin下,查看刚才创建的用户:
showusers 或 db.system.users.find() {"_id":"admin.buru","user":"buru","db":"admin","credentials":{"SCRAM-SHA-1":{"iterationCount":10000,"salt":"gwVwuA/dXvxgSHavEnlyvA==","storedKey":"l2QEVTEujpkCuqDEKqfIWbSv4ms=","serverKey":"M1ofNKXg2sNCsFrBJbX4pXbSgvg="}},"roles":[{"role":"userAdminAnyDatabase","db":"admin"}]}
怎么关闭 mongoDB?千万不要 kill -9 pid,可以 kill -2 pid 或 db.shutdownServer()
下面使用 —auth 参 数,重新启动 mongoDB:
mongodb-linux-i686-3.0.0/bin/mongod--auth-fmongodb-linux-i686-3.0.0/mongodb.conf mongodb-linux-i686-3.0.0/bin/mongo useadmin db.auth("buru","12345678")#认证,返回1表示成功 或 mongodb-linux-i686-3.0.0/bin/mongo-uburu-p12345678--authenticationDatabaseadmin
此时show collections 报错
2015-03-17T10:15:56.011+0800EQUERYError:listCollectionsfailed:{ "ok":0, "errmsg":"notauthorizedonadmintoexecutecommand{listCollections:1.0}", "code":13 } atError(<anonymous>) atDB._getCollectionInfosCommand(src/mongo/shell/db.js:643:15) atDB.getCollectionInfos(src/mongo/shell/db.js:655:20) atDB.getCollectionNames(src/mongo/shell/db.js:666:17) atshellHelper.show(src/mongo/shell/utils.js:625:12) atshellHelper(src/mongo/shell/utils.js:524:36) at(shellhelp2):1:1atsrc/mongo/shell/db.js:643
因为,用户buru只有用户管理的权限。
下面创建用户,用户都跟着库走,创建的用户都是
usetianhe db.createUser( { user:"bao", pwd:"12345678", roles:[ {role:"readWrite",db:"tianhe"}, {role:"read",db:"tianhe2"} ] } )
查看刚刚创建的用户。
showusers { "_id":"tianhe.bao", "user":"bao", "db":"tianhe", "roles":[ { "role":"readWrite", "db":"tianhe" }, { "role":"read", "db":"tianhe2" } ] }
查看整个mongoDB全部的用户:
useadmin db.system.users.find() {"_id":"admin.buru","user":"buru","db":"admin","credentials":{"SCRAM-SHA-1":{"iterationCount":10000,"salt":"gwVwuA/dXvxgSHavEnlyvA==","storedKey":"l2QEVTEujpkCuqDEKqfIWbSv4ms=","serverKey":"M1ofNKXg2sNCsFrBJbX4pXbSgvg="}},"roles":[{"role":"userAdminAnyDatabase","db":"admin"}]} {"_id":"tianhe.bao","user":"bao","db":"tianhe","credentials":{"SCRAM-SHA-1":{"iterationCount":10000,"salt":"//xy1V1fbqEHC1gzQqZHGQ==","storedKey":"ZS/o54zzl/FdcXLQJ98KdAVTfF0=","serverKey":"iIpNYz2Gk8KhyK3zgz6muBt0PI4="}},"roles":[{"role":"readWrite","db":"tianhe"},{"role":"read","db":"tianhe2"}]}
创建完毕,验证一下:
useburu showcollections 2015-03-17T10:30:06.461+0800EQUERYError:listCollectionsfailed:{ "ok":0, "errmsg":"notauthorizedonburutoexecutecommand{listCollections:1.0}", "code":13 } atError(<anonymous>) atDB._getCollectionInfosCommand(src/mongo/shell/db.js:643:15) atDB.getCollectionInfos(src/mongo/shell/db.js:655:20) atDB.getCollectionNames(src/mongo/shell/db.js:666:17) atshellHelper.show(src/mongo/shell/utils.js:625:12) atshellHelper(src/mongo/shell/utils.js:524:36) at(shellhelp2):1:1atsrc/mongo/shell/db.js:643
显然没权限,先auth:
db.auth("bao","12345678") showcollections news system.indexes wahaha参考
Mongo Shell:
Enable Access Control:
Add a User to a Database:
User Methods:
Role Methods: authentication: