一、command line 實際操作:
http://www.mzwu.com/article.asp?id=3324
http://www.jb51.net/article/50501.htm
http://www.jb51.net/article/53830.htm
我將MongoDB用戶分為兩類:全局用戶和庫用戶。全局用戶保存在admin庫中,對所有數據庫都有訪問權限;庫用戶保存在單個數據庫中,只能訪問單個庫。用戶信息保存在哪個庫,身份驗證時就得到那個庫中才能驗證。用戶信息保存在db.system.users中。
創建用戶流程為:先在非安全模式下啟動數據庫,創建全局用戶,再停止數據庫,在安全模式下重新啟動,然后用全局用戶登錄並進行管理。
1.創建用戶
①.在非安全模式下啟動數據庫:
$ mongod --dbpath d:\mongodb\db
②.創建全局用戶:
創建一個超級用戶:
//打開新的命令行 $ mongo MongoDB shell version: 2.0.6 connecting to: localhost/admin >use admin >db.createUser( { user: "name", pwd: "name123", roles: [ { roles: "userAdminAnyDatabase", db: "admin" } ] } )
創建庫用戶:為數據庫test創建一個用戶
>use test >db.createUser( { user:"oneUser", pwd:"oneUser123", roles:[ {role:"read",db:"admin"}, //該用戶可以讀取admin庫數據 {role:"readWrite",db:"test"} //該用戶可以讀寫test庫數據 ] } )
2.用戶登錄
①.先關閉上面已經打開的命令行。然后在安全模式下啟動數據庫:
>mongod --auth --dbpath d:\mongodb\db
②.打開新的命令行,可使用上面創建的用戶:注意,如果是庫用戶,必須要庫下面才能驗證。
>mongo >use test >db.auth("oneUser","oneUser123"); 1 >//可以對test進行讀寫了 >//也可以對admin進行讀取
1. 創建一個超級用戶
use admin db.createUser( { user: "adminUserName", pwd: "userPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
超級用戶的role有兩種,userAdmin或者userAdminAnyDatabase(比前一種多加了對所有數據庫的訪問)。
db是指定數據庫的名字,admin是管理數據庫。
2. 用新創建的用戶登錄
mongo -u adminUserName -p userPassword --authenticationDatabase admin
3. 查看當前用戶的權限
use mydb
db.runCommand( { usersInfo:"userName", showPrivileges:true } )
4. 創建一般用戶,也是用createUser
use db01 db.createUser( { user:"oneUser", pwd:"12345", roles:[ {role:"read",db:"db01"}, {role:"read",db:"db02"}, {role:"read",db:"db03"} ] } )
5. 創建一個不受訪問限制的超級用戶
use admin db.createUser( { user:"superuser", pwd:"pwd", roles:["root"] } )
6. 修改密碼
use admin db.changeUserPassword("username", "xxx")
7. 查看用戶信息
db.runCommand({usersInfo:"userName"})
8. 修改密碼和用戶信息
db.runCommand( { updateUser:"username", pwd:"xxx", customData:{title:"xxx"} } )
注:
1. 和用戶管理相關的操作基本都要在admin數據庫下運行,要先use admin;
2. 如果在某個單一的數據庫下,那只能對當前數據庫的權限進行操作;
3. db.addUser是老版本的操作,現在版本也還能繼續使用,創建出來的user是帶有root role的超級管理員。
http://www.linuxeden.com/html/database/20131122/145802.html
三、以下是roles中的權限說明:
read 指定數據庫的只讀權限,擁有以下權限:
aggregate,checkShardingIndex,cloneCollectionAsCapped,collStats
count,dataSize,dbHash,dbStats,distinct,filemd5
geoNear,geoSearch,geoWalk,group
mapReduce (inline output only.),text (beta feature.)
readWrite 擁有指定數據庫的讀寫權限,除了具有read權限,還擁有以下權限:
cloneCollection (as the target database.),convertToCapped
create (and to create collections implicitly.)
drop(),dropIndexes,emptycapped,ensureIndex()
findAndModify,mapReduce (output to a collection.)
renameCollection (within the same database.)
read和readWrite主要就是對庫中表的操作權限
dbAdmin 指定數據庫的管理權限
clean,collMod,collStats,compact,convertToCapped
create,db.createCollection(),dbStats,drop(),dropIndexes,ensureIndex()
indexStats,profile,reIndex,renameCollection (within a single database.),validate
userAdmin 指定數據庫的用戶管理權限
clusterAdmin 集群管理權限(副本集、分片、主從等相關管理)
addShard,closeAllDatabases,connPoolStats,connPoolSync,_cpuProfilerStart
_cpuProfilerStop,cursorInfo,diagLogging,dropDatabase
enableSharding,flushRouterConfig,fsync,db.fsyncUnlock()
getCmdLineOpts,getLog,getParameter,getShardMap,getShardVersion
hostInfo,db.currentOp(),db.killOp(),listDatabases,listShards
logRotate,moveChunk,movePrimary,netstat,removeShard,unsetSharding
repairDatabase,replSetFreeze,replSetGetStatus,replSetInitiate
replSetMaintenance,replSetReconfig,replSetStepDown,replSetSyncFrom
resync,serverStatus,setParameter,setShardVersion,shardCollection
shardingState,shutdown,splitChunk,splitVector,split,top,touch
readAnyDatabase 任何數據庫的只讀權限(和read相似)
readWriteAnyDatabase 任何數據庫的讀寫權限(和readWrite相似)
userAdminAnyDatabase 任何數據庫用戶的管理權限(和userAdmin相似)
dbAdminAnyDatabase 任何數據庫的管理權限(dbAdmin相似)
詳細的可以參看官方文檔:http://docs.mongodb.org/manual/reference/method/db.addUser/
