วิธีสร้างผู้ใช้และเพิ่มบทบาท MongoDB
⚡ สรุปอย่างชาญฉลาด
การสร้างผู้ใช้และการเพิ่มบทบาทใน MongoDB อาศัยเมธอด db.createUser() ในการกำหนดข้อมูลประจำตัว กำหนดบทบาทในตัว และกำหนดขอบเขตสิทธิ์ให้กับฐานข้อมูลเฉพาะ ซึ่งจะช่วยเสริมความแข็งแกร่งในการควบคุมการเข้าถึงทั้งในบัญชีผู้ดูแลระบบและบัญชีฐานข้อมูลเดียว
บทบาทในตัว (Built-in Roles) คืออะไรใน MongoDB?
ก่อนสร้างบัญชี ควรทำความเข้าใจบทบาทพื้นฐานที่มีอยู่ก่อน MongoDB บทบาท (Role) คือชุดสิทธิ์ที่กำหนดชื่อไว้ และแต่ละสิทธิ์จะจับคู่ทรัพยากร (ฐานข้อมูลหรือชุดข้อมูล) กับการกระทำที่ได้รับอนุญาตให้กระทำกับทรัพยากรนั้น ดังนั้น การกำหนดบทบาทในระหว่างการสร้างผู้ใช้จึงเป็นการตัดสินใจที่แน่ชัดว่าบัญชีนั้นสามารถทำอะไรได้บ้าง
MongoDB ระบบจะจัดกลุ่มบทบาทพื้นฐานต่างๆ ออกเป็นบทบาทผู้ใช้ฐานข้อมูล บทบาทผู้ดูแลระบบฐานข้อมูล บทบาทผู้ดูแลระบบคลัสเตอร์ บทบาทการสำรองข้อมูลและกู้คืน และบทบาทผู้ใช้ระดับสูงสุด ตารางด้านล่างสรุปบทบาทที่ใช้บ่อยที่สุดในการจัดการผู้ใช้:
| บทบาท | Category | สิทธิพิเศษที่ได้รับ |
|---|---|---|
| อ่าน | ผู้ใช้ฐานข้อมูล | สิทธิ์การเข้าถึงแบบอ่านอย่างเดียวสำหรับคอลเลกชันที่ไม่ใช่ระบบทั้งหมดในฐานข้อมูล |
| อ่านเขียน | ผู้ใช้ฐานข้อมูล | สิทธิ์ในการอ่านข้อมูลทั้งหมด รวมถึงการแทรก อัปเดต และลบข้อมูลในคอลเลกชัน |
| dbAdmin | ผู้ดูแลระบบฐานข้อมูล | การจัดการโครงสร้างข้อมูล การจัดทำดัชนี และสถิติสำหรับฐานข้อมูล |
| ผู้ดูแลระบบผู้ใช้ | ผู้ดูแลระบบฐานข้อมูล | สร้างและแก้ไขผู้ใช้และบทบาทในฐานข้อมูลเดียว |
| ผู้ดูแลระบบฐานข้อมูลใดๆ | Superuser | การจัดการผู้ใช้ในทุกฐานข้อมูลภายในระบบ |
| ราก | Superuser | สามารถเข้าถึงทรัพยากรและการดำเนินงานทั้งหมดได้อย่างเต็มที่ |
MongoDB สร้างผู้ใช้ผู้ดูแลระบบ
การสร้างผู้ดูแลระบบผู้ใช้ใน MongoDB ทำได้โดยใช้เมธอด createUser ตัวอย่างต่อไปนี้จะแสดงวิธีดำเนินการนี้
db.createUser(
{ user: "Guru99",
pwd: "password",
roles:[{role: "userAdminAnyDatabase" , db:"admin"}]})
Code คำอธิบาย:
- ขั้นตอนแรกคือการระบุ “ชื่อผู้ใช้” และ “รหัสผ่าน” ที่ต้องการสร้าง
- ขั้นตอนที่สองคือการกำหนดบทบาทให้กับผู้ใช้ เนื่องจากผู้ใช้จำเป็นต้องเป็นผู้ดูแลระบบฐานข้อมูล ดังนั้นเราจึงกำหนดบทบาท “userAdminAnyDatabase” ให้กับผู้ใช้ บทบาทนี้จะอนุญาตให้ผู้ใช้มีสิทธิ์ในการดูแลระบบฐานข้อมูลทั้งหมด MongoDB.
- พารามิเตอร์ db ระบุฐานข้อมูลผู้ดูแลระบบ ซึ่งเป็นฐานข้อมูล Meta พิเศษภายใน MongoDB ซึ่งเก็บข้อมูลสำหรับผู้ใช้รายนี้
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ต่อไปนี้:
Output:
ผลลัพธ์แสดงให้เห็นว่าผู้ใช้รายหนึ่งได้โทรไปที่ “Guruบัญชีผู้ใช้ "99" ถูกสร้างขึ้น และผู้ใช้นั้นมีสิทธิ์ในการเข้าถึงฐานข้อมูลทั้งหมดใน MongoDB.
MongoDB สร้างผู้ใช้สำหรับฐานข้อมูลเดียว
ในการสร้างผู้ใช้ที่จะจัดการฐานข้อมูลเดียว เราสามารถใช้คำสั่งเดียวกันกับที่กล่าวไว้ข้างต้นได้ แต่เราต้องใช้ตัวเลือก "userAdmin" เท่านั้น
ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำเช่นนี้ได้อย่างไร:
db.createUser(
{
user: "Employeeadmin",
pwd: "password",
roles:[{role: "userAdmin" , db:"Employee"}]})
Code คำอธิบาย:
- ขั้นตอนแรกคือการระบุ “ชื่อผู้ใช้” และ “รหัสผ่าน” ที่ต้องการสร้าง
- ขั้นตอนที่สองคือการกำหนดบทบาทให้กับผู้ใช้ ซึ่งในกรณีนี้ เนื่องจากผู้ใช้จำเป็นต้องเป็นผู้ดูแลระบบฐานข้อมูล จึงกำหนดบทบาท “userAdmin” ให้กับผู้ใช้ บทบาทนี้จะอนุญาตให้ผู้ใช้มีสิทธิ์ในการดูแลระบบเฉพาะฐานข้อมูลที่ระบุไว้ในตัวเลือก db เท่านั้น
- พารามิเตอร์ db ระบุฐานข้อมูลที่ผู้ใช้ควรมีสิทธิ์ผู้ดูแลระบบ
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ต่อไปนี้:
Output:
ผลลัพธ์แสดงว่าผู้ใช้ชื่อ "Employeeadmin" ถูกสร้างขึ้น และผู้ใช้รายนั้นมีสิทธิ์เฉพาะในฐานข้อมูล "Employee" เท่านั้น
การจัดการผู้ใช้
ขั้นแรก ให้ทำความเข้าใจบทบาทที่คุณต้องกำหนด มีบทบาทมากมายให้เลือกในรายการนี้ MongoDBตัวอย่างเช่น มีบทบาท "อ่าน" (read) ซึ่งอนุญาตให้เข้าถึงฐานข้อมูลได้เฉพาะแบบอ่านอย่างเดียว และมีบทบาท "อ่านและเขียน" (readWrite) ซึ่งให้สิทธิ์ในการอ่านและเขียนข้อมูลในฐานข้อมูล นั่นหมายความว่าผู้ใช้สามารถออกคำสั่งแทรก ลบ และอัปเดตข้อมูลในคอลเลกชันของฐานข้อมูลนั้นได้
db.createUser(
{
user: "Mohan",
pwd: "password",
roles:[
{ role: "read" , db:"Marketing" },
{ role: "readWrite" , db:"Sales" }
]
})
โค้ดตัวอย่างข้างต้นแสดงให้เห็นว่ามีการสร้างผู้ใช้ชื่อ Mohan และได้รับบทบาทหลายบทบาทในฐานข้อมูลหลายแห่ง ในตัวอย่างข้างต้น เขาได้รับสิทธิ์อ่านอย่างเดียวในฐานข้อมูล "Marketing" และสิทธิ์อ่านและเขียนในฐานข้อมูล "Sales"
วิธีการดูและจัดการ MongoDB ล้านคน
หลังจากสร้างบัญชีแล้ว MongoDB มีชุดคำสั่งสำหรับตรวจสอบ อัปเดต และลบไฟล์โดยไม่ต้องลบทิ้งping และสร้างผู้ใช้แต่ละรายขึ้นมาใหม่ คำสั่งเหล่านี้จะทำงานกับฐานข้อมูลที่สร้างผู้ใช้ไว้ ดังนั้นจึงต้องเปลี่ยนไปใช้ฐานข้อมูลที่ถูกต้องด้วยคำสั่ง use ก่อนที่จะออกคำสั่งเหล่านั้น
คำสั่งการจัดการผู้ใช้ที่ใช้บ่อยที่สุด ได้แก่:
- db.getUsers() — แสดงรายชื่อผู้ใช้ทั้งหมดที่กำหนดไว้ในฐานข้อมูลปัจจุบัน พร้อมทั้งบทบาทที่ผู้ใช้แต่ละคนมี
- db.getUser(“ชื่อผู้ใช้”) — แสดงรายละเอียดของบัญชีเดียว ซึ่งมีประโยชน์สำหรับการตรวจสอบสิทธิ์
- db.grantRolesToUser() — เพิ่มบทบาทอย่างน้อยหนึ่งบทบาทให้กับผู้ใช้ที่มีอยู่โดยไม่ส่งผลกระทบต่อบทบาทปัจจุบัน
- db.revokeRolesFromUser() — ลบบางบทบาทออก และจำกัดการเข้าถึงเมื่อมีการเปลี่ยนแปลงความรับผิดชอบ
- db.changeUserPassword() — รีเซ็ตรหัสผ่านสำหรับบัญชีในขณะที่ยังคงใช้งานอยู่ping บทบาทของมันยังคงอยู่ครบถ้วน
- db.dropUser() — ลบผู้ใช้จากฐานข้อมูลอย่างถาวร
ตัวอย่างด้านล่างนี้แสดงวิธีการให้สิทธิ์ใช้งานเพิ่มเติม ยกเลิกสิทธิ์ใช้งานเดิม รีเซ็ตรหัสผ่าน และสุดท้ายลบบัญชีผู้ใช้:
// List all users in the current database db.getUsers() // Grant an additional role to an existing user db.grantRolesToUser("Employeeadmin", [{ role: "readWrite", db: "Employee" }]) // Remove a role from a user db.revokeRolesFromUser("Employeeadmin", [{ role: "userAdmin", db: "Employee" }]) // Change a user's password db.changeUserPassword("Employeeadmin", "newPassword") // Delete a user db.dropUser("Employeeadmin")
การเรียกใช้ db.getUsers() อีกครั้งหลังจากดำเนินการเหล่านี้ จะยืนยันว่าการเปลี่ยนแปลงได้รับการนำไปใช้แล้ว และเหลือเพียงบัญชีและบทบาทที่ตั้งใจไว้เท่านั้น
แนวทางปฏิบัติที่ดีที่สุดสำหรับ MongoDB การจัดการผู้ใช้
บัญชีผู้ใช้ที่วางแผนมาอย่างดีจะช่วยให้... MongoDB การใช้งานมีความปลอดภัยและตรวจสอบได้ง่าย แนวทางปฏิบัติต่อไปนี้จะช่วยลดความเสี่ยงจากการเปิดเผยข้อมูลโดยไม่ตั้งใจและการใช้สิทธิ์โดยมิชอบ:
- ใช้หลักการให้สิทธิ์ขั้นต่ำที่สุด: ควรให้สิทธิ์เฉพาะบทบาทที่บัญชีนั้นต้องการอย่างแท้จริง โดยให้ความสำคัญกับสิทธิ์ในการอ่านและเขียนข้อมูลในฐานข้อมูลเดียวมากกว่าบทบาทการบริหารจัดการในวงกว้าง
- หลีกเลี่ยงการใช้รากในขั้นตอนการผลิต: สงวนสิทธิ์บทบาท root และ userAdminAnyDatabase ไว้สำหรับการตั้งค่าและงานฉุกเฉินเท่านั้น ไม่ควรใช้ในงานประจำวัน
- เปิดใช้งานการตรวจสอบสิทธิ์: เริ่มเซิร์ฟเวอร์โดยใช้ตัวเลือก –auth เพื่อให้มีการบังคับใช้ข้อมูลรับรองอย่างถูกต้อง
- ใช้รหัสผ่านที่รัดกุม: ผสานความยาวและความซับซ้อนเข้าด้วยกัน และหมุนเวียนรหัสผ่านด้วย db.changeUserPassword() ตามกำหนดเวลา
- ตรวจสอบอย่างสม่ำเสมอ: Revตรวจสอบผลลัพธ์ของ db.getUsers() เป็นระยะ และลบบัญชีผู้ใช้ที่ไม่จำเป็นอีกต่อไป
พฤติกรรมเหล่านี้เมื่อรวมกันแล้วจะช่วยให้มั่นใจได้ว่าทุกบัญชีจะสอดคล้องกับความต้องการที่แท้จริง และสามารถเข้าถึงได้ traced ทุกครั้งที่มีการตรวจสอบความปลอดภัยเกิดขึ้น






