MongoDb身份認證(Linux系統的講解)

前言

MongoDb在安裝之后,默認使用27017端口,也不會提供默認的用戶,更不會開啟身份認證,這意味著只要有人知道你服務器的ip就可以鏈接上你的數據庫,進行任何操縱,這無疑是,這無異于自家的大門對別人敞開,數據毫無安全性可言,所以這篇文章教大家怎么創建用戶并開啟安全驗證。

認證方法

用戶名,密碼驗證

創建用戶

創建用戶官方文檔

查看用戶信息

查看單個用戶
db.getUser('userName');
查看所有用戶信息
db.getUsers();
給Mongdb創建一個用戶管理員

1、先進入【admin】數據庫,使用use admin
2、使用db.createUser( userObj , writeConcern )創建用戶

db.createUser({
    user:"myadmin",
    pwd:"123qwezxc",
    roles:[
        {
            role:"userAdminAnyDatabase",
            db:"admin"
        }
    ]
})

解釋 : 通過上面的代碼給【admin】數據庫添加了一個擁有【userAdminAnyDatabase】【readWriteAnyDatabase】權限的用戶,userAdminAnyDatabase所具有的權限主要是創建用戶,給用戶授予或撤銷角色,readWriteAnyDatabase擁有對數據庫擁有讀寫權限。mondb的官方文檔對于角色做了詳細的說明,想了解一些可以戳這里

開啟身份驗證的兩種方式

1、連接時使用命令參數 --auth

mongod --auth --port 27017 --dbpath '數據庫文件的絕對路徑'

2、修改mongod.conf文件

如果你使用配置文件啟動mongodb,在配置文件中加入下列內容,這里有兩種寫法:

  • YMAL的配置文件格式(mongodb2.6版本之后引入的配置文件格式)
    注意:這里有一個大坑,yaml格式的配置文件,要求是同冒號+空格來分隔鍵值對,否則會解析錯誤。(當時折騰了很久)
security:
  authorization: enabled

image.png

可以使用命令mongod -f /etc/mongod.conf啟動mongodb,如果解析錯誤,會在終端打印出失敗的原因,沒有信息說明mongod實例啟動成功了!

  • 2.6版本之前的配置文件格式(向后兼容的,所以兩種格式的配置可以混用)
auth=true

以上兩種修改方式,大家選擇一種即可,修改完之后使用命令sudo service mongod restart 重啟服務,再使用命令service mongod status查看服務是不是真的啟動了,如果顯示mongod start/running說明啟動成功。之后就啟用了角色訪問控制,用戶只能訪問已被授予權限的數據庫資源和操作。

小貼士:windows用戶可以參考如下命令,將mongodb安裝為服務,這樣就不用每次都去啟動mongod實例

#安裝服務
mongod --config "E:\someSoftWare\MongoDB\mongodb.config" --install --serviceName "mongo"
#卸載服務
mongod --dbpath "E:\someSoftWare\data\db" --logpath "E:\someSoftWare\data\log\mongodb.log"  --remove
#啟動服務
net start mongo

注意:這里config文件的路徑要加雙引號("),否則會一直提示找不到文件

使用用戶管理員登錄數據庫

在連接期間進行身份驗證
mongo --port 27017 -u "登錄名" -p "密碼" --authenticationDatabase "數據庫名"

如果驗證失敗會在命令行打印如下信息


image.png
連接成功之后再認證
#連接
mongo --port 27017
#進入admin數據庫
use admin
#在admin數據庫中認證
db.auth('用戶管理員名稱','密碼')
image.png

驗證成功打印1,失敗打印0.

使用用戶管理員創建其他用戶,細化管理。

給某個數據創建具有讀權限的用戶
#給test數據庫添加
db.createUser({
    user:"readUser",
    pwd:'123qwezxc',
    roles:[
        {
            role:"read",
            db:"test"
        }
    ]
})
創建具有讀寫權限的用戶
db.createUser({
    user:"readWriteUser",
    pwd:'123qwezxc',
    roles:[
        {
            role:"readWrite",
            db:"test"
        }
    ]
})
創建具有數據備份權限的用戶(只能在admin數據庫中添加)
db.createUser({
    user:"backupUser",
    pwd:'123qwezxc',
    roles:[
        {
            role:"backup",
            db:"admin"
        }
    ]
})

注意:db只能指定admin,因為backup和restore角色都在admin數據據庫中

創建具有數據備份權限的用戶(只能在admin數據庫中添加)
db.createUser({
    user:"restoreUser",
    pwd:'123qwezxc',
    roles:[
        {
            role:"restore",
            db:"admin"
        }
    ]
})

mongodb系統內置了很多角色,這里就不一一列舉了,可以查看mognodb內置角色,創建符合自己需求的用戶。

寫在最后

mongodb的用戶角色管理還是相當靈活的,除了系統內置的一些角色,我們還可以使用db.createRole()去定制自己的角色,感興趣的大家自行了解角色管理

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容