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");