標籤:nosql mongodb mongo
首先要知道mongodb預設安裝後是沒有任何認證開啟的,也就是說,所有能串連到伺服器的人都能進資料查看,當然,你可以用防火牆來擋。但沒有防火牆的保護,資料庫暴露出來是非常危險的。
mongodb關於安全分為幾個方面,主要是:認證,角色型存取控制(授權),審計,加密,部署和環境的安全(涉及到網路跟系統的訪問環境)。
一 關於認證
使用使用者名稱認證指令為:
mongo --port 27017 -u manager -p 12345678 --authenticationDatabase admin
建立系統層級的的admin使用者,分配root角色,可以管理所有資料庫,做任意的操作:
注意:建立使用者產生的資料正常情況下應該儲存在admin庫統一管理,但也可以指定儲存在其他資料庫,先運行 use dbname,表示對dbname這個庫操作,然後運行建立使用者的命令之後,資料就儲存在"dbname"資料庫了
use admindb.createUser( { user: "superuser", pwd: "12345678", roles: [ "root" ] })
或者建立指定資料庫的管理使用者:
use admindb.createUser( { user: "tracking", pwd: "track", roles: [ { role: "readWrite", db: "user_data_tracking" }, { role: "dbAdmin", db: "user_data_tracking" } ] })
建立專門系統管理使用者的使用者:
use admindb.createUser( { user: "siteUserAdmin", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
userAdminAnyDatabase和userAdmin區別
userAdminAnyDatabase Provides the same access to user administration operations as userAdmin, except it applies to all databases in thecluster.
use productsdb.createUser( { user: "recordsUserAdmin", pwd: "password", roles: [ { role: "userAdmin", db: "records" } ] })
登入後可以查看使用者權限,用此命令:
db.runCommand( { usersInfo:"manager", showPrivileges:true })
只分配唯讀許可權:
use reportingdb.createUser( { user: "reportsUser", pwd: "12345678", roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" } ] })