安全問題
Mongodb安裝後自身是沒有密碼的,用戶連接只需填寫id地址,端口號,數據庫名稱即可,只要你服務器的mongodb數據庫端口開放,任何人的電腦都可以連接到你的數據庫,操作修改你的mongodb數據,盜取你的數據庫,然後留下一個郵箱和賬號,要求你給比特幣才肯歸還數據庫給你
下面就簡單記錄下自己倒騰MongoDB時候設置密碼的操作。
一、連接上MongoDB
在命令行輸入mongo連接上數據庫(默認數據庫已經安裝並且成功啓動,不知道怎麼安裝啓動可參考https://blog.csdn.net/qq_33692349/article/details/85176128)輸入show dbs查看數據庫
二、切換到 'admin' 數據庫
use admin
三、給admin設置用戶密碼
db.createUser({user: 'root', pwd: '123456', roles: ['root']})
其中user: 用戶名, pwd: 用戶密碼,roles: 用來設置用戶的權限,如讀,讀寫 等等
四、驗證是否設置成功
db.auth(用戶名,用戶密碼)
這裏用db.auth('root', '123456')
如果返回 '1'表示驗證成功, 如果是 '0' 表示驗證失敗..
.
五、重啓MongoDB
這次重啓必須把設置的auth設置爲true
到此admin也就是超級管理員的密碼已經完成了,可操作所有的數據庫,以及給單個數據庫添加用戶和權限,其連接方式爲
xxx.db('mongodb://your name: your pwd@ ip :27017');
your name:爲用戶名
your pwd:爲密碼
使用可視化連接也需要輸入密碼,直接連接將報錯
使用剛纔設置的root用戶和密碼123456連接
此時便可成功連接
到此,數據庫密碼設置就已經完成了。
現在要給特定的每個庫設置權限,開發者可以直接用用戶直接連指定的數據庫操作,比如我這裏有一個庫,庫名字叫做test,這裏以test這個庫爲例,我們要給他新建一個用戶userTest具有寫的權限,開發者便可直接使用userTest這個賬號密碼去操作這一個數據庫,而無法操作其他數據庫
一、連接數據庫後並切換到test數據庫
use test
二、爲這個庫添加一個用戶,並且賦予權限
db.createUser(
{
user:'testUser',
pwd:'123456',
roles: [{role:'readWrite',db:'test'}]
}
)
這行代碼意思是 創建一個testUser
用戶 給予讀寫權限 db表示該用戶操作的數據庫名 role設置爲‘dbOwner’則表示該用戶可對數據進行任何操作,對開發者一般都用dbOwner角色
mongodb role類型
- 數據庫用戶角色(Database User Roles):
read:授予User只讀數據的權限
readWrite:授予User讀寫數據的權限
- 數據庫管理角色(Database Administration Roles):
dbAdmin:在當前dB中執行管理操作
dbOwner:在當前DB中執行任意操作
userAdmin:在當前DB中管理User
- 備份和還原角色(Backup and Restoration Roles):
backup
restore
- 跨庫角色(All-Database Roles):
readAnyDatabase:授予在所有數據庫上讀取數據的權限
readWriteAnyDatabase:授予在所有數據庫上讀寫數據的權限
userAdminAnyDatabase:授予在所有數據庫上管理User的權限
dbAdminAnyDatabase:授予管理所有數據庫的權限
- 集羣管理角色(Cluster Administration Roles):
clusterAdmin:授予管理集羣的最高權限
clusterManager:授予管理和監控集羣的權限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
clusterMonitor:授予監控集羣的權限,對監控工具具有readonly的權限
hostManager:管理Server
三、重啓MongoDB
OK,一切搞定可單獨使用testUser這個用戶名去直接連接test這個庫
xxx.db('mongodb://your name: your pwd@ ip :27017/test');
your name:爲用戶名就是testUser
your pwd:爲密碼就是123456
接下來在說一下刪除用戶:
一、首先用超級管理員登錄
二、切換到要刪除的用戶所管理的數據庫上
例如,testUser用戶管理test數據庫。首先切換到shop數據庫
三、再刪除shopuser用戶
db.dropUser('testUser')