2011-03-23 127 views
7

我想在mongodb中創建安全的數據庫。在mongodb中創建安全數據庫

安全意味着應用程序必須通過用戶名/密碼才能在MongoDB中連接到我的數據庫。

+1

問題是什麼? – Mat 2011-03-23 14:34:48

回答

18

從蒙戈Java教程

的MongoDB可以在對數據庫的訪問是通過名和密碼驗證來控制安全模式下運行。在此模式下運行時,任何客戶端應用程序在執行任何操作之前都必須提供名稱和密碼。在Java驅動程序,你只需做的連接蒙戈對象如下:

boolean auth = db.authenticate(myUserName, myPassword); 

如果用戶名和密碼是有效的數據庫,AUTH將是真實的。否則,這將是錯誤的。如果可用,您應該查看MongoDB日誌以獲取更多信息。

大多數用戶在受信任的環境中無需身份驗證即可運行MongoDB。


配置身份驗證和安全

驗證存儲在每個數據庫的system.users集合。例如,在數據庫projectx中,projectx.system.users將包含用戶信息。

我們應該先配置整個數據庫服務器進程的管理員用戶。該用戶存儲在特殊的管理數據庫下。

如果沒有用戶在admin.system.users配置,可以從本地主機接口訪問數據庫而不認證。因此,從運行的數據庫(從而對本地主機)服務器,運行數據庫的殼,並配置一個管理用戶:

$ ./mongo 
> use admin 
> db.addUser("theadmin", "anadminpassword") 

我們現在有數據庫管理創建了一個用戶。需要注意的是,如果我們以前沒有認證的,我們現在必須,如果我們要進行進一步的操作,因爲在admin.system.users用戶。

> db.auth("theadmin", "anadminpassword") 

我們可以把現有的用戶與該命令的數據庫:

> db.system.users.find() 

現在,讓我們來配置其它數據庫中的「常規」的用戶。

> use projectx 
> db.addUser("joe", "passwordForJoe") 

最後,讓我們添加一個只讀用戶。 (僅支持1.3。2+)

> use projectx 
> db.addUser("guest", "passwordForGuest", true) 
+0

因此,您在admin數據庫中創建了管理員'theadmin',然後使用'--auth'選項重新啓動了mongod。 現在,如果你做'./mongo admin',你會如何自動登錄而不提供用戶並且通過? – Strae 2012-02-08 16:41:28

+0

在這種情況下,您已經啓動了mongo shell但尚未通過身份驗證。嘗試和做任何操作,例如'show collections',你會得到'未授權的'錯誤。 – WildService 2012-11-14 12:31:13

3
  • 爲蒙戈實例創建一個管理用戶,

> use admin

> db.addUser("admin", "xyzxyz")

  • 切換到DB中所需要的認證

> use newdb

> db.addUser("newuser", "strongpwd")

  • 停止蒙戈實例/服務。如果通過ppa安裝了mongodb,則將其配置爲服務。

sudo service mongodb stop

,如果它是從源代碼安裝,使用停止進程:

/etc/init.d/mongodb stop

  • 更改配置文件默認情況下

vim /etc/mongodb.conf使用認證

auth = true

  • 啓動MongoDB的。如果它是一個服務

sudo service mongodb restart

其他

mongod --config /etc/mongodb.conf

  • 檢查AUTH已啓用:

> show collectionsnewdb應該給予錯誤

"$err" : "not authorized for query on newdb.system.namespaces", 
"code" : 16550 

> db.auth("newuser", "strongpwd")

現在分貝newdb固定後應該工作。