[MongoDB設置訪問權限、設置用戶](http://www.cnblogs.com/zengen/archive/2011/04/23/2025722.html)
MongoDB已經使用很長一段時間了,基于MongoDB的數據存儲也一直沒有使用到權限訪問(MongoDB默認設置為無權限訪問限制),今天特地花了一點時間研究了一下,研究成果如下:
注:研究成果基于Windows平臺
MongoDB在本機安裝部署好后
1\. 輸入命令:show dbs,你會發現它內置有兩個數據庫,一個名為admin,一個名為local。local好像沒啥用,如果哪位在使用過程中發現了這個local表的用途,希望能夠留言提醒,那我們就專心來說說admin表
2\. 輸入命令:use admin,你會發現該DB下包含了一個system.user表,呵呵,沒錯,這個表就等同于MsSql中的用戶表,用來存放超級管理員的,那我們就往它里面添加一個超級管理員試試看
3\. 輸入命令:db.addUser('sa','sa'),這里我添加一個超級管理員用戶,username為sa,password也為sa,即然我們添加了超級管理員,那咱們就來測試下,看看咱們再次連接MongoDB需不需要提示輸入用戶名、密碼,我們先退出來(ctrl+c)
4\. 輸入命令:use admin
5\. 輸入命令:show collections,查看該庫下所有的表,你會發現,MongoDB并沒有提示你輸入用戶名、密碼,那就奇怪了,這是怎么回事呢?在文章最開始提到了,
MongoDB默認設置為無權限訪問限制,即然這樣,那我們就先把它設置成為需要權限訪問限制,咱們再看看效果,怎么設置呢?
6\. 在注冊表中,找到MongoDB的節點,在它的ImgPath中,我們修改一下,加入?**-auth**,如下所示:
"D:\Program Files\mongodb\bin\mongod" -dbpath? e:\work\data\mongodb\db? -logpath? e:\work\data\mongodb\log?**-auth**?-service
7\. 輸入命令:use admin
8\. 輸入命令:show collections,呵呵,我們發現無法查看該庫下的表了,提示:"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",很明顯,提示沒有權限,看來關鍵就在于這里,我們在啟動MongoDB時,需要加上**-auth**參數,這樣我們設置的權限才能生效,好,接下來我們使用剛剛之前設置的用戶名、密碼來訪問
9\. 輸入命令:db.auth('sa','sa'),輸出一個結果值為1,說明這個用戶匹配上了,如果用戶名、密碼不對,會輸入0
10\. 輸入命令:show collections,呵呵,結果出來了,到這里,權限設置還只講到一多半,接著往下講,我們先退出來(ctrl+c)
11\. 輸入命令:mongo TestDB,我們嘗試連接一個新的庫(無論這個庫是否存在,如果不存在,往該庫中添加數據,會默認創建該庫),然后,我們想看看該庫中的表
12\. 輸入命令:show collections,好家伙,沒權限,我們輸入上面創建的用戶名、密碼
13\. 輸入命令:db.auth('sa','sa'),輸入結果0,用戶不存在,這下有人可能就不明白了,剛剛前面才創建,怎么會不存在呢?原因在于:當我們**單獨訪問**MongoDB的數據庫時,需要權限訪問的情況下,用戶名密碼并非超級管理員,而是該庫的system.user表中的用戶,注意,我這里說的是**單獨訪問**的情況,什么是**不單獨訪問**的情況呢?接下來再講,現在咋辦,沒權限,那我們就嘗試給庫的system.user表中添加用戶
14\. 輸入命令:db.addUser('test','111111'),哇靠,仍然提示沒有權限,這可咋辦,新的數據庫使用超級管理員也無法訪問,創建用戶也沒有權限,呵呵,別急,即然設定了超級管理員用戶,那它就一定有權限訪問所有的庫
15\. 輸入命令:use admin
16\. 輸入命令:db.auth('sa','sa')
17\. 輸入命令:use TestDB
18\. 輸入命令:show collections,哈哈,一路暢通無阻,我們發現可以利用超級管理員用戶訪問其它庫了,呵呵,這個就是**不單獨訪問**的情況,不難發現,我們是先進入admin庫,再轉到其它庫來的,admin相當于是一個最高級別官員所在區域,如果你是個地產商,想在地方弄個大工程做做,你想不經過那些高級官員就做,這是行不通的,你需要先去到他們那里,送點禮,再順著下到地方,工程你就可以拿到手了,此言論僅為個人觀點,不代表博客園;即然工程拿到手了,就要開始建了,那我們不至于每加塊磚、添個瓦都得去和那幫高級官員打招呼吧,所以我們得讓這個工程合法化,咱們得把相關的手續和證件弄齊全,不至于是違建
19\. 輸入命令:db.addUser('test','111111'),我們給TestDB庫添加一個用戶,以后每次訪問該庫,我都使用剛剛創建的這個用戶,我們先退出(ctrl+c)
20\. 輸入命令:mongo TestDB
21\. 輸入命令:show collections,提示沒有權限
22\. 輸入命令:db.auth('test','111111'),輸出結果1,用戶存在,驗證成功
23\. 輸入命令:show collections,沒再提示我沒有權限,恭喜您,成功了
好累啊!一口氣寫完,呵呵
注:當需要使用權限才能訪問MongoDB時,如果需要查看MongoDB中所有的庫,我們只能通過超級管理員權限,輸入命令show dbs來查看了。
- 數據庫
- CAP定理
- 關系模型
- 關系數據庫
- NoSQL
- ODBC
- JDBC
- ODBC、JDBC和四種驅動類型
- mysql
- 安裝與配置
- CentOS 7 安裝 MySQL
- 優化
- 比較全面的MySQL優化參考
- 1、硬件層相關優化
- 1.1、CPU相關
- 1.2、磁盤I/O相關
- 2、系統層相關優化
- 2.1、文件系統層優化
- 2.2、其他內核參數優化
- 3、MySQL層相關優化
- 3.1、關于版本選擇
- 3.2、關于最重要的參數選項調整建議
- 3.3、關于Schema設計規范及SQL使用建議
- 3.4、其他建議
- 后記
- Mysql設計與優化專題
- ER圖,數據建模與數據字典
- 數據中設計中的范式與反范式
- 字段類型與合理的選擇字段類型
- 表的垂直拆分和水平拆分
- 詳解慢查詢
- mysql的最佳索引攻略
- 高手詳解SQL性能優化十條經驗
- 優化SQL查詢:如何寫出高性能SQL語句
- MySQL索引原理及慢查詢優化
- 數據庫SQL優化大總結之 百萬級數據庫優化方案
- 數據庫性能優化之SQL語句優化1
- 【重磅干貨】看了此文,Oracle SQL優化文章不必再看!
- MySQL 對于千萬級的大表要怎么優化?
- MySQL 數據庫設計總結
- MYSQL性能優化的最佳20+條經驗
- 數據操作
- 數據語句操作類型
- DCL
- 修改Mysql數據庫名的5種方法
- DML
- 連接
- 連接2
- DDL
- 數據類型
- 字符集
- 表引擎
- 索引
- MySQL理解索引、添加索引的原則
- mysql建索引的幾大原則
- 淺談mysql的索引設計原則以及常見索引的區別
- 常用工具簡介
- QA
- MySQL主機127.0.0.1與localhost區別總結
- 視圖(view)
- 觸發器
- 自定義函數和存儲過程的使用
- 事務(transaction)
- 范式與反范式
- 常用函數
- MySQL 數據類型 詳解
- Mysql數據庫常用分庫和分表方式
- 隔離級別
- 五分鐘搞清楚MySQL事務隔離級別
- mysql隔離級別及事務傳播
- 事務隔離級別和臟讀的快速入門
- 數據庫引擎中的隔離級別
- 事務隔離級別
- Innodb中的事務隔離級別和鎖的關系
- MySQL 四種事務隔離級的說明
- Innodb鎖機制:Next-Key Lock 淺談
- SQL函數和存儲過程的區別
- mongo
- MongoDB設置訪問權限、設置用戶
- redis
- ORM
- mybatis
- $ vs #
- mybatis深入理解(一)之 # 與 $ 區別以及 sql 預編譯
- 電商設計
- B2C電子商務系統研發——概述篇
- B2C電子商務系統研發——商品數據模型設計
- B2C電子商務系統研發——商品模塊E-R圖建模
- B2C電子商務系統研發——商品SKU分析和設計(一)
- B2C電子商務系統研發——商品SKU分析和設計(二)
- 數據庫命名規范--通用