วิธีสร้างผู้ใช้และเพิ่มบทบาท MongoDB

⚡ สรุปอย่างชาญฉลาด

การสร้างผู้ใช้และการเพิ่มบทบาทใน MongoDB อาศัยเมธอด db.createUser() ในการกำหนดข้อมูลประจำตัว กำหนดบทบาทในตัว และกำหนดขอบเขตสิทธิ์ให้กับฐานข้อมูลเฉพาะ ซึ่งจะช่วยเสริมความแข็งแกร่งในการควบคุมการเข้าถึงทั้งในบัญชีผู้ดูแลระบบและบัญชีฐานข้อมูลเดียว

  • 🔑 วิธีการหลัก: คำสั่ง db.createUser() จะสร้างบัญชีผู้ใช้โดยระบุชื่อผู้ใช้ รหัสผ่าน และอาร์เรย์บทบาทในคำสั่งเดียว
  • 🛡️ ขอบเขตการดูแลระบบ: บทบาท userAdminAnyDatabase มอบสิทธิ์การจัดการในทุกฐานข้อมูล ในขณะที่บทบาท userAdmin จำกัดการควบคุมไว้ที่ฐานข้อมูลที่ระบุชื่อเพียงฐานข้อมูลเดียว
  • 🎯 การมอบหมายบทบาท: บทบาทที่กำหนดไว้ล่วงหน้า เช่น สิทธิ์อ่านและสิทธิ์อ่านเขียน จะสอดคล้องกับการกระทำที่ผู้ใช้อาจกระทำกับคอลเลกชันอย่างแม่นยำ
  • 👥 หลายฐานข้อมูล: บัญชีผู้ใช้เดียวสามารถมีบทบาทที่แตกต่างกันในฐานข้อมูลหลายแห่งภายในอาร์เรย์บทบาทเดียวได้
  • การตรวจสอบ: เมธอด db.getUsers() และผลลัพธ์ที่ได้ยืนยันว่าบัญชีและสิทธิ์ต่างๆ ได้รับการจัดเตรียมอย่างถูกต้องแล้ว

วิธีการสร้างผู้ใช้และเพิ่มบทบาทใน MongoDB

บทบาทในตัว (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"}]})

MongoDB สร้างผู้ใช้ผู้ดูแลระบบ

Code คำอธิบาย:

  1. ขั้นตอนแรกคือการระบุ “ชื่อผู้ใช้” และ “รหัสผ่าน” ที่ต้องการสร้าง
  2. ขั้นตอนที่สองคือการกำหนดบทบาทให้กับผู้ใช้ เนื่องจากผู้ใช้จำเป็นต้องเป็นผู้ดูแลระบบฐานข้อมูล ดังนั้นเราจึงกำหนดบทบาท “userAdminAnyDatabase” ให้กับผู้ใช้ บทบาทนี้จะอนุญาตให้ผู้ใช้มีสิทธิ์ในการดูแลระบบฐานข้อมูลทั้งหมด MongoDB.
  3. พารามิเตอร์ db ระบุฐานข้อมูลผู้ดูแลระบบ ซึ่งเป็นฐานข้อมูล Meta พิเศษภายใน MongoDB ซึ่งเก็บข้อมูลสำหรับผู้ใช้รายนี้

หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ต่อไปนี้:

Output:

MongoDB สร้างผู้ใช้ผู้ดูแลระบบ

ผลลัพธ์แสดงให้เห็นว่าผู้ใช้รายหนึ่งได้โทรไปที่ “Guruบัญชีผู้ใช้ "99" ถูกสร้างขึ้น และผู้ใช้นั้นมีสิทธิ์ในการเข้าถึงฐานข้อมูลทั้งหมดใน MongoDB.

MongoDB สร้างผู้ใช้สำหรับฐานข้อมูลเดียว

ในการสร้างผู้ใช้ที่จะจัดการฐานข้อมูลเดียว เราสามารถใช้คำสั่งเดียวกันกับที่กล่าวไว้ข้างต้นได้ แต่เราต้องใช้ตัวเลือก "userAdmin" เท่านั้น

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำเช่นนี้ได้อย่างไร:

MongoDB สร้างผู้ใช้สำหรับฐานข้อมูลเดียว

db.createUser(
{
	user: "Employeeadmin",

	pwd: "password",

	roles:[{role: "userAdmin" , db:"Employee"}]})

Code คำอธิบาย:

  1. ขั้นตอนแรกคือการระบุ “ชื่อผู้ใช้” และ “รหัสผ่าน” ที่ต้องการสร้าง
  2. ขั้นตอนที่สองคือการกำหนดบทบาทให้กับผู้ใช้ ซึ่งในกรณีนี้ เนื่องจากผู้ใช้จำเป็นต้องเป็นผู้ดูแลระบบฐานข้อมูล จึงกำหนดบทบาท “userAdmin” ให้กับผู้ใช้ บทบาทนี้จะอนุญาตให้ผู้ใช้มีสิทธิ์ในการดูแลระบบเฉพาะฐานข้อมูลที่ระบุไว้ในตัวเลือก db เท่านั้น
  3. พารามิเตอร์ db ระบุฐานข้อมูลที่ผู้ใช้ควรมีสิทธิ์ผู้ดูแลระบบ

หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ต่อไปนี้:

Output:

MongoDB สร้างผู้ใช้สำหรับฐานข้อมูลเดียว

ผลลัพธ์แสดงว่าผู้ใช้ชื่อ "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 ทุกครั้งที่มีการตรวจสอบความปลอดภัยเกิดขึ้น

คำถามที่พบบ่อย

ใช่แล้ว ผู้ช่วย AI สามารถแปลงคำอธิบายธรรมดาให้เป็นคำสั่ง db.createUser() ที่ถูกต้อง กำหนดอาร์เรย์บทบาทที่เหมาะสม และกำหนดขอบเขตให้กับฐานข้อมูลได้ ควรทดสอบคำสั่งที่สร้างขึ้นในฐานข้อมูลที่ไม่ใช่ฐานข้อมูลใช้งานจริงก่อนเรียกใช้เสมอ

ใช่แล้ว เครื่องมือตรวจสอบที่ขับเคลื่อนด้วย AI สามารถอ่านเอาต์พุตของ db.getUsers() ระบุบัญชีที่ถือสิทธิ์ root หรือ userAdminAnyDatabase และแนะนำบทบาทที่มีสิทธิ์น้อยที่สุดได้ ผู้ดูแลระบบควรตรวจสอบคำแนะนำแต่ละข้อก่อนที่จะเพิกถอนสิทธิ์การเข้าถึงในระบบที่ใช้งานอยู่

บทบาท userAdmin ใช้สำหรับจัดการผู้ใช้และบทบาทในฐานข้อมูลเฉพาะหนึ่งฐานข้อมูล ในขณะที่ userAdminAnyDatabase จะให้สิทธิ์การดูแลระบบผู้ใช้ในทุกฐานข้อมูลในอินสแตนซ์ ใช้ userAdmin สำหรับการควบคุมในขอบเขตที่กำหนด และใช้ userAdminAnyDatabase เฉพาะสำหรับผู้ดูแลระบบที่น่าเชื่อถือเท่านั้น

สลับไปยังฐานข้อมูลที่ผู้ใช้คนนั้นอยู่โดยใช้คำสั่ง use จากนั้นเรียกใช้คำสั่ง db.dropUser(“username”) MongoDB ลบบัญชีผู้ใช้และบทบาทต่างๆ ในฐานข้อมูลนั้น ยืนยันการลบโดยการเรียกใช้คำสั่ง db.getUsers() หลังจากนั้น

สรุปโพสต์นี้ด้วย: