MongoDB 單例項節點主機的使用者和許可權一般操作步驟
阿新 • • 發佈:2020-11-12
步驟總結:
1.先正常啟動
2.建立使用者,建立資料庫病授權使用者
3.關閉程式,開啟安全,然後啟動
4.使用賬號和密碼連線
- 按未開啟認證的方式(配置檔案中沒開啟安全選項並且啟動命令中不新增
--auth
引數,)來啟動MongoDB服務 - 使用Mongo客戶端登入,然後建立管理使用者:
# 切換到admin庫 > use admin # 建立系統超級使用者 myroot,設定密碼12345,設定角色root > db.createUser({user:"myroot",pwd:"12345",roles:[{"role":"root","db":"admin"}]}) # 或者 db.createUser({user:"myroot",pwd:"12345",roles:["root"]}) # 建立專門用來管理admin庫的賬號myadmin,只用來作為使用者許可權的管理 > db.createUser({user:"myadmin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) # 檢視已經建立了的使用者的情況: > db.system.users.find() # 刪除使用者 > db.dropUser("myadmin") # 修改密碼 > db.changeUserPassword("myroot", "123456")
提示:
1)本案例建立了兩個使用者,分別對應超管和專門用來管理使用者的角色,事實上,你只需要一個使用者即可。如果你對安全要求很高,防止超管洩漏,則不要建立超管使用者。
2)和其它資料庫(MySQL)一樣,許可權的管理都差不多一樣,也是將使用者和許可權資訊儲存到資料庫對應的表中。Mongodb儲存所有的使用者資訊在admin 資料庫的集合system.users中,儲存使用者名稱、密碼和資料庫資訊。
3)如果不指定資料庫,則建立的指定的許可權的使用者在所有的資料庫上有效,如 {role:"userAdminAnyDatabase", db:""}
- 認證測試
# 切換到admin > use admin # 密碼輸錯 > db.auth("myroot","12345") Error: Authentication failed. 0 # 密碼正確 > db.auth("myroot","123456") 1
- 建立普通使用者
建立普通使用者可以在沒有開啟認證的時候新增,也可以在開啟認證之後新增,但開啟認證之後,必須使用有操作admin庫的使用者登入認證後才能操作。
底層都是將使用者資訊儲存在了admin資料庫的集合system.users中。
# 建立(切換)將來要操作的資料庫articledb, > use articledb switched to db articledb # 建立使用者,擁有articledb資料庫的讀寫許可權readWrite,密碼是123456 > db.createUser({user:"bobo", pwd: "123456", roles: [{role:"readWrite",db:"articledb"}]}) # 或者 db.createUser({user: "bobo", pwd: "123456", roles: ["readWrite"]}) # 測試是否可用 > db.auth("bobo","123456") 1
提示:
如果開啟了認證後,登入的客戶端的使用者必須使用admin庫的角色,如擁有root角色的myadmin使用者,再通過myadmin使用者去建立其他角色的使用者
- 服務端開啟認證
(1)關閉已經啟動的服務
1)使用linux命令殺死程序
2)在mongo客戶端中使用shutdownServer命令來關閉
> use admin
switched to db admin
> db.shutdownServer()
需要幾個條件:
- 必須是在 admin庫下執行該關閉服務命令。
- 如果沒有開啟認證,必須是從 localhost登陸的,才能執行關閉服務命令。
- 非 localhost的、通過遠端登入的,必須有登入且必須登入使用者有對admin操作許可權才可以。
(2)以開啟認證的方式啟動服務
有兩種方式開啟許可權認證啟動服務:一種是引數方式,一種是配置檔案方式。
1)引數方式
在啟動時指定引數 --auth
,如:
mongod -f mongod.conf --auth
- 配置檔案方式
在mongod.conf配置檔案中加入:
vim mongod.conf
security:
#開啟授權認證
authorization: enabled
此時啟動就不指定引數 --auth
了 ,如:
mongod -f mongod.conf
- 客戶端連線登入
有兩種認證方式,一種是先登入,在mongo shell中認證;一種是登入時直接認證。
1)先連線再認證
# mongo --host 192.168.0.253 --port 27017
> use articledb
switched to db articledb
> db.auth("bobo","123456")
1
> db.comment.find()
>
2)連線時直接認證
# 對admin資料庫進行登入認證和相關操作:
mongo --host 192.168.0.253 --port 27017 --authenticationDatabase admin -u myroot -p 123456
# 對articledb資料庫進行登入認證和相關操作:
mongo --host 192.168.0.253 --port 27017 --authenticationDatabase articledb -u bobo -p 123456
提示:
- -u :使用者名稱
- -p :密碼
- --authenticationDatabase :指定連線到哪個庫。當登入是指定使用者名稱密碼時,必須指定對應的資料庫!