Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีเปลี่ยนชื่อผู้ใช้ (Rename User) ใน MongoDB

MongoDB ไม่มีคำสั่ง Rename User โดยตรง แต่สามารถทำได้โดย อัปเดต Collection system.users ใน Database admin ด้วย $set

ไวยากรณ์

db.system.users.update(
  {"user": "yourOldUserName"},
  {$set: {"user": "yourNewUserName"}}
);

ขั้นตอนการเปลี่ยนชื่อ User

1. สลับไปที่ Database admin และดู User ทั้งหมด

> use admin;
switched to db admin
> db.getUsers();

ผลลัพธ์ (ตัวอย่าง):

[
  {"_id": "admin.Chris", "user": "Chris", "db": "admin", "roles": [...], "mechanisms": [...]},
  {"_id": "admin.John", "user": "John", "db": "admin", "roles": [...], "mechanisms": [...]},
  {"_id": "admin.Robert", "user": "Robert", "db": "admin", "roles": [...], "mechanisms": [...]}
]

2. เปลี่ยนชื่อ User จาก 'John' เป็น 'Larry'

> db.system.users.update({"user": "John"}, {$set: {"user": "Larry"}});
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

3. ยืนยันการเปลี่ยนชื่อด้วย getUser()

> db.getUser('Larry');

ผลลัพธ์: User เปลี่ยนชื่อเป็น Larry แล้ว (แต่ _id ยังคงเป็น admin.John):

{
  "_id": "admin.John",
  "user": "Larry",
  "db": "admin",
  "roles": [{"role": "userAdminAnyDatabase", "db": "admin"}],
  "mechanisms": ["SCRAM-SHA-1", "SCRAM-SHA-256"]
}

4. ตรวจสอบ User เก่า (John) หายไปแล้ว

> db.getUser('John');

ผลลัพธ์:

null

⚠️ ข้อควรระวังสำคัญ

  • _id ไม่เปลี่ยน: _id ยังคงเป็น admin.John (Original Username) เพราะ _id เป็น Immutable
  • วิธีนี้เป็น Direct System Collection Update ควรระวังใช้ใน Production
  • วิธีที่แนะนำอย่างเป็นทางการ: สร้าง User ใหม่ → Grant Roles เดียวกัน → ลบ User เก่า
  • MongoDB 4.2+ รองรับ updateUser() แต่ไม่รองรับเปลี่ยน Username โดยตรง

วิธีที่แนะนำ (Best Practice)

// 1. สร้าง User ใหม่
db.createUser({
  user: "Larry",
  pwd: "password",
  roles: [{role: "userAdminAnyDatabase", db: "admin"}]
});

// 2. ย้าย Roles/Privileges (ถ้าจำเป็น)
// 3. ลบ User เก่า
db.dropUser("John");