在開啟mongodb 服務時不新增任何引數時,可以對資料庫任意操作,而且可以遠端訪問資料庫。
如果啟動的時候指定—auth引數,可以對資料庫進行使用者驗證
在freebsd 系統中 mongodb 增加認證的選項有兩種辦法
方法一
直接修改啟動指令碼在 /usr/local/etc/rc.d/mongod,修改一下啟動引數 後面增加乙個 --auth
方法二
以上兩種方法都可以。修改配置檔案 /usr/local/etc/mongodb.conf
auth=true
新增使用者$ ./mongod --auth >> mongodb.log & 開啟
./mongo
mongodb shell version: 1.8.1
connecting to: test
>show dbs
admin (empty)
local (empty)
在剛安裝完畢的時候mongodb都預設有乙個admin資料庫,而admin.system.users中將會儲存比在其它資料庫中設定的使用者許可權更大的使用者資訊。
當admin.system.users中乙個使用者都沒有時,即使mongod啟動時新增了--auth引數,如果沒有在admin資料庫中新增使用者,此時不進行任何認證還是可以做任何操作,直到在admin.system.users中新增了乙個使用者。
下面建立資料庫tage,並給tage建立使用者:
在admin庫中建立root使用者> use tage
switched to db tage
> db.adduser("tage","123")
如果系統已經起用了許可權認證,需要給其他資料庫新增或者修改登入使用者的時候,需要先連線到admin庫> use admin
switched to db admin
> db.adduser("root","123456")
驗證使用者mongo admin -uroot -p123456
然後選擇需要增加使用者的庫,比如 foo
use foo
db.adduser("newusername","new password")
下面試驗使用者許可權設定:> db.auth("root","123")
0 密碼錯誤,返回0,驗證失敗
> db.auth("root","123456")
1 驗證成功,返回1
以上驗證說明,登入時不指定使用者名稱與密碼,就會報錯。下面指定使用者與密碼$ ./mongo 登入時不加使用者名稱與密碼
mongodb shell version: 1.8.1
connecting to: test
> use tage
switched to db tage
> db.system.users.find()
error:
mongodb登入時預設連線test庫,如果登入時不指定庫名,就會報錯$ ./mongo -uroot -p123456 指定使用者與密碼,但是不指定庫名
mongodb shell version: 1.8.1
connecting to: test
wed aug 3 21:30:42 uncaught exception: login failed
exception: login failed
下面以tage庫的使用者名稱登入進行驗證
下面以admin庫下的root使用者登入進行驗證$ ./mongo tage -utage -p123
mongodb shell version: 1.8.1
connecting to: tage
> db.system.users.find() 對所屬自己的庫進行操作,有許可權
> use admin
switched to db admin
> db.system.users.find() 對其他庫操作,沒有許可權
error:
mongodb的遠端使用者連線./mongo admin -uroot -p123456
mongodb shell version: 1.8.1
connecting to: admin
> db.system.users.find()
> use tage
switched to db tage
> db.system.users.find() 對其他庫進行操作,有許可權
刪除/修改使用者語法結構:mongo –uusername –ppwd serverip:port/dbname
其中port預設為27017
$ ./mongo -uroot -p123456 192.168.2.150/admin
mongodb shell version: 1.8.1
connecting to: 192.168.2.150/admin
> db.system.users.find()
更多的安全考慮不管是新增使用者,修改使用者密碼,修改使用者操作許可權都使用adduser()來完成。刪除使用者可以用remove()來實現。
> db.system.users.find()
寫道剛說了mongodb的安全認證其實還是簡陋的,所以我們還是有其他很多的安全考慮。
*1.比如說mongodb傳輸協議是不加密的,如果需要加密的話,我們可以考慮使用ssh隧道或是他們的技術來對客戶端和服務端之間的通訊進行加密。
*2.將mongodb部署在只有客戶端伺服器才能訪問到的環境,比如內網,vpn網路中,可以使用 bind_ip = 本機或內網。
*3.如果確實需要將mongodb暴露在外部環境可以考慮使用iptables等技術進行訪問限制。
參考:
mongodb許可權認證
1.拉取mongo映象 docker pull mongo 2.執行mongo容器 docker run privileged true p 27017 27017 v home mongo 27017 db data db v home mongo conf data configdb name ...
MongoDB的使用者 認證和許可權
開啟mongodb服務時不新增任何引數時,預設是沒有許可權驗證的,登入的使用者可以對資料庫任意操作而且可以遠端訪問資料庫!在剛安裝完畢的時候mongodb都預設有乙個admin資料庫,此時admin資料庫是空的,沒有記錄許可權相關的資訊!當admin.system.users乙個使用者都沒有時,即使...
mongodb之使用者 認證 角色 許可權管理
前言 使用者許可權管理很重要,只給需要的許可權,防止應用系統漏洞導致脫庫 authentication 認證識別,解決我是誰 authorization 操作授權,我能做什麼 mongodb cr 官方自定義實現認證機制,通過使用者名稱和密碼,通過challenge response方式,來識別和驗...