MongoDB的授權登錄處理


一、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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM